1

我在 javascript 中有以下用于密码验证的正则表达式:

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

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

正则表达式规则是:

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

但是,正则表达式似乎不起作用。它匹配任何字符。我该如何解决?

4

3 回答 3

1

使用正向前瞻可以在一个匹配调用中验证您的正则表达式。使用这个正则表达式:

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

See this code live in action

于 2012-06-01T17:25:31.827 回答
1

尝试:

/^(?=(?:.*[a-z]){1})(?=(?:.*[A-Z]){1})(?=(?:.*\d){1})(?=(?:.*[!#$%()*,-./:;=?@[]^_`{|}~ ]){1,}).{12,25}$/
于 2012-06-01T17:31:44.267 回答
1

此正则表达式有效:

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

它使用前瞻技术来确保至少有 1 位数字、小写字符、...

此外,请查看Regex 表达式以获取类似挑战的密码规则

于 2012-06-01T17:33:30.747 回答