前几天需求要求做一个手机号,邮箱和网站的正则匹配,找了半天才找到几个能用的,百度坑太多,为了避免你跳坑,做了一个简单的封装,大佬莫笑。下面见代码
// 常用正则匹配 第一个参数传入要匹配的字段,第二个参数为正常向span标签里添加的类名和方法之类的东西,第三个参数可增加新的正则表达式,但是一定要是数组格式
export function regular(str, className, newRegular) {
// /(1[3|4|5|6|7|8][\d]{9}|0[\d]{2,3}-[\d]{7,8}|400[-]?[\d]{3}[-]?[\d]{4})/g; 手机号
// /[\d\w]+\b@[a-zA-ZA-z0-9]+\.[a-z]+/g 邮箱
// /(https?|http|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g 网址
let regular = [/(1[3|4|5|6|7|8][\d]{9}|0[\d]{2,3}-[\d]{7,8}|400[-]?[\d]{3}[-]?[\d]{4})/g, /[\d\w]+\b@[a-zA-ZA-z0-9]+\.[a-z]+/g, /(https?|http|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g]
// 手机号
let scorePhone = {}
// 邮箱
let scoreMailbox = {}
// 网址
let scoreWebsite = {}
// 返回的处理后的字段
let newFields = str
if (newRegular) {
regular = [...regular, ...newRegular]
}
regular.forEach((item, index) => {
let obj = {}
obj.index = []
if (str.search(item) !== -1) {
obj.textAll = str.match(item)
if (obj.textAll.length) {
obj.textAll.forEach((x, y) => {
obj.index = [...obj.index, [str.indexOf(x), str.indexOf(x) + str.match(item)[y].length]]
newFields = newFields.replace(item, `<span ${className?className:''} >${x}</span>`)
})
}
}
index === 0 ? scorePhone = obj : index === 1 ? scoreMailbox = obj : scoreWebsite = obj
})
return {
scorePhone,
scoreMailbox,
scoreWebsite,
newFields
}
}