我需要一个正则表达式来测试一个字符串

  • 至少14个字符-有效的是A-Za-z0-9#,.-_
  • 在这14个
  • 中至少包含6个字母
  • 在这14个
  • 中至少要有2个数字

    有没有一种方法可以将其包装在一个正则表达式中(目前,我有一个javascript和php函数可以执行三个单独的测试,一个总计为14,另一个至少有两个数字,另一个在至少6个字母。

    因此,以下内容将是有效的:
  • blabla2bla2f54a(有效> 14个字符,至少6个字母,至少2个数字)
  • thisIsNotValidAtAll(无效,因为少于2个数字)
  • 最佳答案

    简单的!首先让我们看一下PHP中的注释版本:

    $re = '/# Match 14+ char password with min 2 digits and 6 letters.
        ^                       # Anchor to start of string.
        (?=(?:.*?[A-Za-z]){6})  # minimum of 6 letters.
        (?=(?:.*?[0-9]){2})     # minimum of 2 numbers.
        [A-Za-z0-9#,.\-_]{14,}  # Match minimum of 14 characters.
        $                       # Anchor to end of string.
        /x';
    

    这是JavaScript版本:

    var re = /^(?=(?:.*?[A-Za-z]){6})(?=(?:.*?[0-9]){2})[A-Za-z0-9#,.\-_]{14,}$/;
    

    附录20121130:

    我注意到这个答案最近得到了好评。这使用了一个过时的表达式,所以我认为是时候用一个更好的表达式来更新它了。

    更有效的表达方式:

    通过完全摆脱星号并贪婪地应用更精确的表达式(否定的char类),可以得到更有效的解决方案:

    $re = '/# Match 14+ char password with min 2 digits and 6 letters.
        ^                              # Anchor to start of string.
        (?=(?:[^A-Za-z]*[A-Za-z]){6})  # minimum of 6 letters.
        (?=(?:[^0-9]*[0-9]){2})        # minimum of 2 numbers.
        [A-Za-z0-9#,.\-_]{14,}         # Match minimum of 14 characters.
        $                              # Anchor to end of string.
        /x';
    

    这是新的JavaScript版本:

    var re = /^(?=(?:[^A-Za-z]*[A-Za-z]){6})(?=(?:[^0-9]*[0-9]){2})[A-Za-z0-9#,.\-_]{14,}$/;
    

    编辑:#,.-_添加到有效字符列表中。
    编辑:将贪婪更改为懒星。
    编辑20121130:添加了替代版本,其中懒点星已替换为更精确的表达式的更有效的贪婪应用程序。

    关于php - 字符串的正则表达式,必须包含至少14个字符,其中至少2个是数字,并且至少6个是字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5527191/

    10-12 14:26