通过正则表达式检查合法字符但结果意外

时间:2015-01-27 09:42:28

标签: javascript regex

我已经定义了一些合法使用的字符。

var reg= /[-!*() ~{}'<>._a-zA-Z0-9]/g                                            

为了测试正则表达式的正确性,我写了一个测试用例如下:

var arr= ["-", ".", "!", "~", "*", "(", ")", "'", "_","<",">"];  
for(var i=0 ;i < arr.length;i++)                                                 
{                                                                                
 console.log( arr[i] +"  " + reg.test(arr[i]));                               
}                                                                                

console.log()的输出是true/false/true/false ...

当我输入reg.test(.);时,它也很奇怪 输出也是相同的:true/false/true/false。 (迭代)

任何人都可以告诉我原因,并给我一个正确的正则表达式。

2 个答案:

答案 0 :(得分:2)

这是因为多次使用全局正则表达式时,lastIndex属性会更新。

MDN:

  

与exec()(或与之结合使用)一样,test()称为multiple   同一个全局正则表达式实例上的时间将超过   上一场比赛。

因此,您需要删除全局标志。它无论如何都不会影响结果,因为当遇到第一个非允许字符时它仍然返回false。

答案 1 :(得分:1)

删除g全局)标记。

> var reg= /[-!*() ~{}'<>._a-zA-Z0-9]/;
undefined
> var arr= ["-", ".", "!", "~", "*", "(", ")", "'", "_","<",">"];
undefined
> for(var i=0 ;i < arr.length;i++)
... {
... console.log( arr[i] +"  " + reg.test(arr[i]));
... }
-  true
.  true
!  true
~  true
*  true
(  true
)  true
'  true
_  true
<  true
>  true