【问题标题】:regex not validating正则表达式不验证
【发布时间】:2012-06-01 16:59:50
【问题描述】:

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

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

【问题讨论】:

  • 首先,我在该正则表达式中看不到任何强制 12-25 个字符限制的地方。您似乎刚刚使用了 * ,这意味着 '0 或更多' - 您当前的正则表达式只是读取:开始 -- 您的四个项目符号中的任意数量的字符(包括 0) -- 结束
  • 将您的正则表达式拆分为 3 个正则表达式并检查所有规则。

标签: javascript regex


【解决方案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

【讨论】:

    【解决方案2】:

    试试:

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

    【讨论】:

      【解决方案3】:

      这个正则表达式有效:

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

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

      另外,请查看 Regex expression for password rules 以了解类似的挑战

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        • 2021-02-24
        • 2014-02-25
        相关资源
        最近更新 更多