昨天测试项目兼容性的时候,遇到了js报错提示 ‘字符集越界’,查了度娘,各种说法都有,但是大致都是是正则有问题;
集中在正则看了下;
有人这样说:
因为根据之前了解的,在正则中需要转移的字符有 ( [ { \ ^ $ | ) ? * + . ] } 这些,并没有考虑"-",但在正则的[]括号中,"-"表示一个字符范围,比如a-z,0-7之类的,此时如果不给"-"转义,则会认为匹配+至*或者/,而+-*这个字符集是不对的,同理本来应该写成a-z,如果写成了z-a,也是同样的问题,所以在此处把"-"也进行转义即可。
我的正则是:
var re =/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{8,16}$/;
在尝试了将所有的需要转译的字符进行转译后,发现正则没有办法用;
最后重新写了正则:
var re =/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,16}$/;
这下不报错了,两个正则的区别在于,第二个没有[^],也许是这部分需要转译,但是我没有求证,大家伙有没有好的意见和建议呢。