A-A+

正则判断是否为数字与字母的混合js代码

2016年01月18日 前端设计 暂无评论 阅读 7 views 次

不能小于12位,且必须为字母和数字的混合,验证字符串包含数字简单,验证字符串包含字母也简单,验证字符串不包含其它字符也简单,可以用这三个正则分别检查一次字符串,逻辑运算出最终结果.

下面是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则为合法,可见“数字开头,紧跟字母”的正则没有起作用,测试代码如下:

  1. <script type="text/javascript">   
  2. function istrue(str){   
  3. var reg=/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig;   
  4. return reg.test(str);   
  5. }   
  6. var str? = 'AaBc';   
  7. var str2 = 'aaa123';   
  8. var str3 = '123dd';   
  9. var str4 = '1230923403982';   
  10. document.write(istrue(str)+'<br />');   
  11. document.write(istrue(str2)+'<br />');   
  12. document.write(istrue(str3)+'<br />');   
  13. document.write(istrue(str4)+'<br />');   
  14. </script>  

结果为如下代码:

false,true,false,false

结果中的第三个,将'123dd'判断为非法是错误的,刚开始以为是g的问题,去掉了还是不好使,应该是浏览器bug,我认为lexrus的正则是正确的,可能是浏览器无法处理或”|”的两边都包含正向预查(?=).

修改之后的正则如下:

/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i 意思和上面差不多,但是没有使用正向预查,测试代码如下:

  1. <script type="text/javascript">   
  2.  function istrue(str){   
  3.  var reg=/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i;   
  4.  return reg.test(str);   
  5.  }   
  6.  var str? = 'AaBc';   
  7.  var str2 = 'aaa123';   
  8.  var str3 = '123dd';   
  9.  var str4 = '1230923403982';   
  10.  document.write(istrue(str)+'<br />');   
  11.  document.write(istrue(str2)+'<br />');   
  12.  document.write(istrue(str3)+'<br />');   
  13.  document.write(istrue(str4)+'<br />');   
  14.  </script>  

结果为如下代码:

false,true,true,false

正确。

标签:

给我留言