正则对同一个表达式多次text返回值不同

前言

正则表达式用的也是比较少,一般也没有自己写过,但是今天用于判断手机号的时候突然发现一个问题,同样的值用两次正则判断它的输出值竟然不一样,最后百度了一下,也是找到了结果,就来简单记录一下

一、代码

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值