我需要一个带条件的正则表达式:
- 最少 6 个字符,最多 50 个字符
- 必须包含 1 个字母
- 必须包含 1 个数字
- 可能包含特殊字符,如 !@#$%^&*()_+
目前我有模式: (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$
但是它不允许特殊字符,有人有好的正则表达式吗?
谢谢
我需要一个带条件的正则表达式:
目前我有模式: (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$
但是它不允许特殊字符,有人有好的正则表达式吗?
谢谢
也许可以使用单个正则表达式,但这使得很难向用户反馈他们不遵循的规则。像这样的更传统的方法为您提供反馈,您可以在 UI 中使用这些反馈来告诉用户哪些密码规则没有得到满足:
function checkPwd(str) {
if (str.length < 6) {
return("too_short");
} else if (str.length > 50) {
return("too_long");
} else if (str.search(/\d/) == -1) {
return("no_num");
} else if (str.search(/[a-zA-Z]/) == -1) {
return("no_letter");
} else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {
return("bad_char");
}
return("ok");
}
在 jfriend00 回答之后,我写了这个小提琴来测试他的解决方案,并进行一些小改动以使其更加直观:
这是代码:
checkPwd = function() {
var str = document.getElementById('pass').value;
if (str.length < 6) {
alert("too_short");
return("too_short");
} else if (str.length > 50) {
alert("too_long");
return("too_long");
} else if (str.search(/\d/) == -1) {
alert("no_num");
return("no_num");
} else if (str.search(/[a-zA-Z]/) == -1) {
alert("no_letter");
return("no_letter");
} else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+\.\,\;\:]/) != -1) {
alert("bad_char");
return("bad_char");
}
alert("oukey!!");
return("ok");
}
顺便说一句,它的工作就像一个魅力!;)
最好的问候,当然要感谢 jfriend00!
^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{5,50}$
这里的优雅之处在于您不必对诸如 $@# 等符号进行硬编码。
要接受所有符号,您只需说:“也接受所有非字母数字字符和数字”。
正则表达式的最后一部分{5,50}
是最小和最大字符数,如果输入的密码少于 6 或超过 50 个字符,则正则表达式返回不匹配。
检查 7 到 16 个字符之间的密码,其中只包含字符、数字、下划线和第一个字符必须是字母-
/^[A-Za-z]\w{7,14}$/
检查 6 到 20 个字符之间的密码,其中至少包含一位数字、一位大写字母和一位小写字母
/ ^(?=。\ d)(?=。 [AZ])(?=。* [AZ])。{6,20} $ /
检查 7 到 15 个字符之间的密码,其中至少包含一个数字和一个特殊字符
/ ^(?=。[0-9])(?=。 [!@#$%^&])[A-ZA-Z0-9!@#$%^& ] {7,15} $ /
检查 8 到 15 个字符之间的密码,其中至少包含一个小写字母、一个大写字母、一个数字和一个特殊字符
/^(?=. \d)(?=. [az])(?=. [AZ])(?=. [^a-zA-Z0-9])(?!.*\s).{ 8,15}$/
我有一个正则表达式,但它有点棘手。
^(?:(?<Numbers>[0-9]{1})|(?<Alpha>[a-zA-Z]{1})|(?<Special>[^a-zA-Z0-9]{1})){6,50}$
让我解释一下以及如何检查测试的密码是否正确:
正则表达式中有三个命名组。1) "Numbers": 将匹配字符串中的单个数字。2) "Alpha":将匹配从 "a" 到 "z" 或 "A" 到 "Z" 的单个字符 3) "Special":将匹配不是 "Alpha" 或 "Numbers" 的单个字符
这三个命名组被分组在一个备用组中,并{6,50}
建议正则表达式机器捕获上述组中的至少 6 个,但不超过 50 个。
为确保输入正确的密码,您必须检查是否匹配,然后检查匹配的组是否按您的需要捕获。我是一名 C# 开发人员,不知道它在 javascript 中是如何工作的,但在 C# 中,您必须检查:
match.Groups["Numbers"].Captures.Count > 1
希望它在 javascript 中也能正常工作!祝你好运!