正则 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() 返回值正确了...

posted @ 2016-10-11 10:43  记忆城主  阅读(596)  评论(0编辑  收藏  举报