关于javascript:RegEx用于密码验证,仅限特定字符

RegEx for password validation, only specific characters

本问题已经有最佳答案,请猛点这里访问。

我正在尝试创建用于密码验证的正则表达式。以下是要求。

  • 最小长度8。
  • 至少1个大写。
  • 至少1个小写。
  • 至少1个数字。
  • 0个或多个字符!@ $$%^?允许~()。
  • 允许使用。
  • 允许使用。
  • 0~9允许。
  • 这是我迄今为止的表达方式:

    ^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*?_~()-]*).*$

    这个表达式主要起作用,只是我需要它只允许项目符号5-9。现在它将允许未指定的字符,例如+=

    如何修改此表达式以仅允许项目符号5-9,而不允许其他字符?


    你不需要预先检查第一个和第五个到第五个条件-你可以在最后一场比赛中检查所有这些,比如

    1
    ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\w!@#$%^&*?~()-]{8,}$

    使用先行检查条件2-4。对于实际匹配,我们需要至少8个字符作为您允许的字符。我用了a-zA-Z0-9_\wintead来缩短时间。

    你可以看到它在这里工作。

    网站提示:限制密码中的字符通常被视为一个坏主意。同样,xkcd也有一些关于密码的内容。


    可以将RegExp分解为离散部分,添加或删除所需部分,使用Array.prototype.every(),在函数中包含&& !/[+=]/.test(str),输入字符串的.length属性。

    1
    2
    3
    4
    5
    6
    var matches = [/[A-Z]/, /[a-z]/, /\d/, /[!@#$%^&*?_~()-]/];
    var str ="Ab0!#?~_";
    var pw = matches.every(function(re) {
      return re.test(str) && !/[+=]/.test(str)
    }) && str.length === 8;
    console.log(pw);