我需要一个正则表达式来测试一个字符串
A-Za-z0-9#,.-_
有没有一种方法可以将其包装在一个正则表达式中(目前,我有一个javascript和php函数可以执行三个单独的测试,一个总计为14,另一个至少有两个数字,另一个在至少6个字母。
因此,以下内容将是有效的:
最佳答案
简单的!首先让我们看一下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/