我需要jquery正则表达式来使用表单验证插件验证密码

我需要jquery正则表达式来使用表单验证插件验证密码,jquery,regex,jquery-validate,Jquery,Regex,Jquery Validate,我正在尝试使用表单验证插件附带的扩展规则patern用正则表达式验证密码。我在网上尝试过很多表达方式,但到目前为止,没有一种表达方式符合我的要求,或者由于某种原因,这些表达方式根本不符合我的描述。我需要验证以下内容: 密码必须包含6到20个字符 它必须至少包含一个大写字母 它必须至少包含一个数字 它必须至少包含一个小写字母 必须有可能重复 这不应该影响到这些角色的归属 它不能允许空白 其中一个子集的特殊字符应该是可选的 因此,用户应该能够输入以下示例: AAAA 1A Passw0rd abCd

我正在尝试使用表单验证插件附带的扩展规则
patern
用正则表达式验证密码。我在网上尝试过很多表达方式,但到目前为止,没有一种表达方式符合我的要求,或者由于某种原因,这些表达方式根本不符合我的描述。我需要验证以下内容:

  • 密码必须包含6到20个字符
  • 它必须至少包含一个大写字母
  • 它必须至少包含一个数字
  • 它必须至少包含一个小写字母
  • 必须有可能重复
  • 这不应该影响到这些角色的归属
  • 它不能允许空白
  • 其中一个子集的特殊字符应该是可选的
  • 因此,用户应该能够输入以下示例:

  • AAAA 1A
  • Passw0rd
  • abCdef9
  • $$$$H1TZZZ
  • 我想看看有没有人能帮我。我不是正则表达式专家。

    您应该允许用户输入他们想要的任何密码


    无论如何,您的任务最好是通过一个接一个的多次测试来完成。这不仅便于编程,还可以让您准确地告诉用户为什么不接受他们的密码。

    不要为此使用正则表达式


    您有一个检查列表:只需使用常规字符串函数进行检查。

    尽管使用regexp应该考虑两次。以下是您如何做到这一点:

    var pattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=[\$!]).{6,26}$/;
    var password = '$$$h1Tzzzz';
    password.match(pattern);
    //output
    ["$$$h1Tzzzz"]
    password = '$$$hTzzzz';
    password.match(pattern);
    //output
    null
    

    您可以使用\$和!“$”将特殊字符添加到括号中因为它有特殊的意义而被转义。

    谢谢,Kolink。你说得很对。不幸的是,考虑到应用程序面向的受众类型,如果我不强制用户至少输入大写字母,大多数用户将使用
    1234
    作为密码。我接受您的建议,进行部分验证,以便更好地向用户传达错误。但是,我认为表单验证插件不支持这一点。你知道吗?为什么不自己写代码呢a) 这是什么regex口味的?在我所知道的那些中,
    *
    ,匹配任何东西,0次或更多次。这些0或更多的anythings后面应该跟括号中的字符。b) 同样,在我所知道的风格中,正则表达式将匹配字符串/行的开头(
    ^
    ),但前提是后跟
    *[a-z]
    ,但前提是…,并且是6到26次。Tbh,我搞不懂你的正则表达式。您能解释一下吗?@phresnel a)JavaScript正则表达式是Perl风格的,有一些限制。你的假设是对的<代码>*与任何内容匹配0次或更多次。b) 不完全是这样。它与
    ^
    匹配
    (?=regex)
    是零宽度正向前瞻。在一个位置进行匹配,在该位置可以匹配前瞻中的模式。只匹配位置。它不使用任何字符或展开匹配。因此,每当它在
    (?=[\$!])
    之外时,它仍然位于字符串的开头,并且字符串包含所有必需的字符。然后检查长度
    {6,20}$