JS手机号,邮箱,网址正则匹配

1,136 阅读1分钟

前几天项目需要用到手机号,邮箱和网址的正则,在百度上找了好久,踩了一堆坑,很多根本就不用,然后再找到了这三个比较完善的正则匹配,正好有点想法,就封装了一个简单的小功能,大佬莫笑,话不多说,实际功能见下面的代码。

// 常用正则匹配   第一个参数传入要匹配的字段,第二个参数为正常向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
    }
}