正则判断是否为数字与字母的混合js代码
下面是lexrus的正则:
代码如下 | |
/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig 思路非常的清晰啊: [a-z]+(?=[0-9]) |
字母开头,后面必须紧跟着数字。
[0-9]+(?=[a-z]
数字开头,后面必须紧跟着字母。
[a-z0-9]+
后面的字符只要是数字或者字母就可以了。经过测试,发现不好使,123dd会被识别为不合法,dd123则为合法,可见“数字开头,紧跟字母”的正则没有起作用。测试代码如下:
代码如下 | |
<script type="text/javascript"> function istrue(str){ var reg=/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig; return reg.test(str); } var str? = 'AaBc'; var str2 = 'aaa123'; var str3 = '123dd'; var str4 = '1230923403982'; document.write(istrue(str)+'<br />'); document.write(istrue(str2)+'<br />'); document.write(istrue(str3)+'<br />'); document.write(istrue(str4)+'<br />'); </script> |
结果为:
代码如下 | |
false,true,false,false |
结果中的第三个,将'123dd'判断为非法是错误的。刚开始以为是g的问题,去掉了还是不好使。应该是浏览器bug,我认为lexrus的正则是正确的,可能是浏览器无法处理或”|”的两边都包含正向预查(?=)。
修改之后的正则如下:
/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i 意思和上面差不多,但是没有使用正向预查,测试代码如下:
代码如下 | |
<script type="text/javascript"> |
结果为
代码如下 | |
false,true,true,false |
正确。