【问题标题】:Regex for alphanumeric password, with at least 1 number and character字母数字密码的正则表达式,至少包含 1 个数字和字符
【发布时间】:2009-07-28 17:53:13
【问题描述】:

需要字母数字密码的正则表达式帮助,至少有 1 个数字和字符,长度必须在 8-20 个字符之间。

我有这个,但似乎没有用(它也没有长度要求):

^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$

【问题讨论】:

    标签: c# javascript


    【解决方案1】:

    如果您看一下这个MSDN link,它会给出一个密码验证 RegEx 表达式的示例,以及(更具体地说)如何在 ASP.NET 中使用它。

    对于您要完成的工作,这应该可行:

        (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,20})$
    

    这需要至少一位数字,至少一个字母字符,无特殊字符,长度为 8-20 个字符。

    【讨论】:

    • 澄清一下,第一个“负前瞻断言”,即“(?!^[0-9]*$)”,负责确保至少有一个字母字符,第二个是确保至少有一个数字,最后“^([a-zA-Z0-9]{8,20})$”说我们需要8-20个字母数字。
    【解决方案2】:

    为什么不只使用几个简单的函数来检查呢?

    checkPasswordLength( String password);
    checkPasswordNumber( String password);
    

    可能需要更多的重复和连续检查相同字符的出现。

    【讨论】:

    • 输入验证是 regex 的一大优势,使用 RegEx 表达式可以让您在未来更加灵活。
    • 当您进行不匹配的前瞻等操作时,它们并不是“很棒”。如果您确实使用正则表达式,则没有理由将所有内容硬塞到单个正则表达式中。 +1 以获得理智的答案。
    • @Adam Robinson - 谁说 checkPasswordLength() 不能在函数中使用正则表达式?没有什么能阻止您在此解决方案中使用它们的优势。
    • @ceeja, @John:RegEx 的灵活性和速度主要来自于能够一次性检查事物(至少从开发的角度来看)。显式地或通过封装在多个函数中将其分成两个语句,将减少它。对于如此简单的事情,它似乎也被过度设计了。我看不出使用正则表达式来验证输入是多么“疯狂”。
    【解决方案3】:
    ^(?=.{8,20}$)(?=.*[0-9])(?=.*[a-zA-Z]).*
    

    ? :)

    【讨论】:

    • 最后的 .* 似乎会匹配特殊字符。
    【解决方案4】:

    用一些简单的字符串函数来做这个验证,而不是试图硬塞一个难以验证的正则表达式来做这个不是更好吗?

    【讨论】:

    • 嗯,有时正则表达式更容易进行这种(密码?)验证。特别是因为您可以使用 Asp.Net 正则表达式验证器 :)
    • Sanjay,输入验证是 RegEx 最常见的应用之一,如果/当验证要求发生变化时,使用它们可以为您提供更大的灵活性。
    • 正则表达式验证不会告诉您输入失败有什么问题,除了“这与正则表达式不匹配”​​之外,因此您无法具体告诉用户他做错了什么。在很多情况下,这是可以的。
    【解决方案5】:

    这样的东西会更接近您的需求。 (不过我没有测试它。)

    Regex test = new Regex("^(?:(?<ch>[A-Za-z])|(?<num>[9-0])){8,20}$");
    Match m = test.Match(input);
    if (m.Success && m.Groups["ch"].Captures.Count > 1 && m.Groups["num"].Captures.Count > 1)
    {
      // It's a good password.
    }
    

    【讨论】:

      【解决方案6】:

      此代码用于 javascript

      // *********** ALPHA-Numeric check ***************************
      function checkAlphaNumeric(val)
      {
          var mystring=new String(val)
      
          if(mystring.search(/[0-9]+/)==-1) // Check at-leat one number
          {
              return false;
          }
          if(mystring.search(/[A-Z]+/)==-1 && mystring.search(/[a-z]+/)==-1) // Check at-leat one character
          {
              return false;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-05-30
        • 2015-01-18
        • 1970-01-01
        • 2017-02-06
        • 2022-12-03
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        相关资源
        最近更新 更多