我已经定义了一些合法使用的字符。
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
。 (迭代)
任何人都可以告诉我原因,并给我一个正确的正则表达式。
答案 0 :(得分:2)
这是因为多次使用全局正则表达式时,lastIndex
属性会更新。
与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