2012-06-01 40 views
1

我有密码验证JavaScript中的正则表达式如下:正则表达式没有验证

^[!#\$%\(\)\*,\-\./:;=\[email protected]\[\\\]\^_`\{\|\}~a-zA-Z0-9]*$ 

    <script type="text/javascript"> 
     var regex = "^[!#\$%\(\)\*,\-\./:;=\[email protected]\[\\\]\^_`\{\|\}~a-zA-Z0-9]*$"; 
     var value = 'test'; 
     if (value.match(regex) == false) { 
      alert('password invalid'); 
     } 
    </script> 

正则表达式规则是:

  • 12-25个字符
  • 至少一个大写字母
  • 至少有一个小写字母
  • 至少有一个数字
  • !10特殊字符
  • 至少一个:#$%()*, - 。/:; = []^_`@ {|}〜

然而,正则表达式似乎不工作。它匹配任何字符。我该如何解决?

+1

首先,我没有看到在该强制执行12-25个字符限制的正则表达式的任何地方。您似乎刚刚使用*表示'0或更多' - 您当前的正则表达式正好是: 开始 - 您的四个项目符号点(包括0)中的任意数量的字符 - 结束 – Ina

+0

将您的正则表达式分成3个正则表达式检查所有规则。 – gaussblurinc

回答

1

使用积极向前的正则表达式可以在单个匹配调用中进行验证。使用此正则表达式:

var regex = 
    /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!#$%()\*,/:;[email protected]\[\\\]\^_`{}|.-])^.{12,25}$/; 
var value = 'aaaAaaaaa?test2'; 
if (!value.match(regex)) 
    document.writeln('invalid'); 
else 
    document.writeln('valid'); 

See this code live in action

1

尝试:

/^(?=(?:.*[a-z]){1})(?=(?:.*[A-Z]){1})(?=(?:.*\d){1})(?=(?:.*[!#$%()*,-./:;[email protected][]^_`{|}~ ]){1,}).{12,25}$/