JS中创建RegExp时偷懒可是要受折磨的
我以前做JS的匹配时总是这样使用:
[javascript]
// 比如下面对数字进行匹配的语句
function email(value){
return /^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$/ig.test(value);
}
而不是:
[javascript]
// 比如下面对email进行匹配的
function email(value){
var reg=new RegExp(“^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$”, ‘ig’);
return reg.test(value);
}
这样写,一般下好像没什么问题,但今天我遇到个“很有意思”的问题:在多次刷新看返回结果后,发现结果总是在true、false之间轮回。
如何导致的我到现在也没弄明白,但解决的办法就是像上面那样先用new RgExp创建正则对象,这样返回的结果就没有问题了。可点Demo查看例子(注意,例子中只有email是有问题的!要看到“特效”,你得先在email处写上个正确的 ^ _^////)