我需要一个正则表达式来验证HTML中的输入字段。该模式至少应包含以下三个:
有效的输入字符串:
- AAss11
- AA11 @@
- aa11 @@
- AAss @@
无效的输入字符串:
- AAAAAA
- AA11111
- aa111111
- AA @@@@@@@
- AAss11 $
- 1111111
- @@@@@@@
- $ 1Asssss
- AAss11 @ $
我写了这个正则表达式:
^(((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[^$])|((?=.*[A-Z])(?=.*[a-z])(?=.
[!#%&'()*+,-./:;<=>?@[\]^_`{|}~])[^$])|((?=.*[A-Z])(?=.*[0-9])(?=.
[!#%&'()*+,-./:;<=>?@[\]^_`{|}~])[^$])|((?=.*[a-z])(?=.*[0-9])(?=.
[!#%&'()*+,-./:;<=>?@[\]^_`{|}~])[^$])).{6,16}$
答案 0 :(得分:3)
您可以执行所有迭代(4个中的3个)。如果ECMAScript新产品问世,
它支持条件(?(cond)yes|no)
,这大大简化了。
这里是乱序:
^(?:(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])|(?=.*[0-9])(?=.*[a-z])(?=.*[!"#%&'()*,\-./:;?@[\]_{}])|(?=.*[0-9])(?=.*[A-Z])(?=.*[!"#%&'()*,\-./:;?@[\]_{}])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!"#%&'()*,\-./:;?@[\]_{}]))[0-9a-zA-Z!"#%&'()*,\-./:;?@[\]_{}]{6,16}$
展开视图
^
(?:
(?= .* [0-9] )
(?= .* [a-z] )
(?= .* [A-Z] )
#(?= .*[!"#%&'()*,\-./:;?@[\]_{}] )
|
(?= .* [0-9] )
(?= .* [a-z] )
#(?= .*[A-Z] )
(?= .* [!"#%&'()*,\-./:;?@[\]_{}] )
|
(?= .* [0-9] )
#(?= .*[a-z] )
(?= .* [A-Z] )
(?= .* [!"#%&'()*,\-./:;?@[\]_{}] )
|
#(?= .*[0-9] )
(?= .* [a-z] )
(?= .* [A-Z] )
(?= .* [!"#%&'()*,\-./:;?@[\]_{}] )
)
[0-9a-zA-Z!"#%&'()*,\-./:;?@[\]_{}]{6,16}
$
JS示例
var RxPwd = new RegExp("^(?:(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])|(?=.*[0-9])(?=.*[a-z])(?=.*[!\"#%&'()*,\\-./:;?@[\\]_{}])|(?=.*[0-9])(?=.*[A-Z])(?=.*[!\"#%&'()*,\\-./:;?@[\\]_{}])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!\"#%&'()*,\\-./:;?@[\\]_{}]))[0-9a-zA-Z!\"#%&'()*,\\-./:;?@[\\]_{}]{6,16}$", "mg");
var strPwdTest =
// Should pass
"AAss11\n" +
"AA11@@\n" +
"aa11@@\n" +
"AAss@@\n" +
// Should fail
"AAAAAA\n" +
"AA11111\n" +
"aa111111\n" +
"AA@@@@@@\n" +
"AAss11$\n" +
"1111111\n" +
"@@@@@@\n" +
"$1Asssss\n" +
"AAss11@$\n";
var match;
while ( match = RxPwd.exec( strPwdTest ) )
{
console.log( match[0], "\t ..Passed" );
}