正则 test 方法失效

有时候再开发过程中需要重复使用 test() 进行验证,如果发现 test() 方法一会儿出现 true, 一会儿会冷不丁的出现一个 false,这是为啥呢?

因为正则后边加了一个 /g , 写过正则的人应该都清除,/g 的意思是全局匹配,所以在用 test() 进行判断时。内部会有一个 lastIndex 来记录上一次最后匹配的位置,当重复调用的时候,会从继续从 lastIndex 所记录的位置开始继续往后匹配,所以就会导致一会儿值是

true,一会儿值是 false 了, 明白原理那就上解决方法:

  1. 简单粗暴法:直接在正则后边去掉 /g

  2. 保守治疗法:在调用之前可以 手动的 改变正则的 lastIndex = 0 即可  (eg : /\s+/g.lastIndex = 0 )

具体案例就不上了,有兴趣的话可以自己写一个 验证表单控件是否有空格的正则,然后重复调用 test() 方法,会发现如果控件值含有空格并且不增加的时候, test() 返回值就不那么理想了,当给表单控件增加一个值时,test() 返回值正确了...

转载于:https://www.cnblogs.com/huhulove/p/5948385.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值