前言
正则表达式用的也是比较少,一般也没有自己写过,但是今天用于判断手机号的时候突然发现一个问题,同样的值用两次正则判断它的输出值竟然不一样,最后百度了一下,也是找到了结果,就来简单记录一下
一、代码
let temReg=/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/g
//这里输入一个手机号(正确的手机号)
console.log(temReg('手机号'))//true
console.log(temReg('手机号'))//false
二、问题
第一次调用的时候,是从第0位开始匹配,第二次调用是接着上一次匹配的结束位置开始查找,我们可以将上边的代码改为下面的哪有,来看一下匹配的位置
let temReg=/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/g
console.log(temReg.lastIndex)//0
console.log(temReg('手机号'))//true
console.log(temReg.lastIndex)//11
console.log(temReg('手机号'))//false
三、解决方法
方法1
每次匹配的时候把lastIndex的值修改为0
let temReg=/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/g
console.log(temReg('手机号'))//true
temReg.lastIndex=0
console.log(temReg('手机号'))//true
方法2
取消全局匹配
把正则后边的g给去掉就行了
let temReg=/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
console.log(temReg('手机号'))//true
console.log(temReg('手机号'))//true