我需要一个正则表达式来检查:
密码至少包含八个字符,包括至少一个数字,包括小写和大写字母以及特殊字符,例如#、?、!。
它不能是您的旧密码,也不能包含您的用户名、“密码”或“网站名称”
这是我的验证表达式,用于八个字符,包括一个大写字母、一个小写字母和一个数字或特殊字符。
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
如果密码必须是八个字符,包括一个大写字母、一个特殊字符和字母数字字符,我怎么写?
一个更“通用”的版本(?),不允许任何英文字母作为特殊字符。
^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$
变量pwdList=['@@V4-\3Z'zTzM{>k',‘12qw!“QW12',123qweASD!"#',“1qA!"#$%&',“Günther32”,'123456789',‘qweASD123’,'qweqQWEQWEqw',“12qwAS!”],re=/^(?=\S*[a-z])(?=[S*[a-z])((?=`S*\d)(?=\S*[^\w\S])\S{8,}$/;pwdList.forEach(函数(pw){document.write('<span style=“color:'+(re.test(pw)?'green':'red')+'”>'+pw+'</span><br/>');});
至少八个字符,至少一个字母和一个数字:
"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"
至少八个字符,至少一个字母、一个数字和一个特殊字符:
"^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$"
至少八个字符,至少一个大写字母、一个小写字母和一个数字:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"
至少八个字符,至少一个大写字母、一个小写字母、一位数字和一个特殊字符:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"
最少八个字符,最多十个字符,至少一个大写字母,一个小写字母,一位数字和一个特殊字符:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"
没有直接回答这个问题,但它真的必须是正则表达式吗?
我曾经做过很多Perl,并习惯于用正则表达式解决问题。然而,当它们变得更加复杂时,你需要编写几十个单元测试来消除所有这些小bug。
此外,正则表达式通常比命令式或函数式解决方案慢几倍。
例如,以下(不是非常FP)Scala函数解决原始问题的速度大约是最流行答案的正则表达式的三倍。它的作用也很清楚,您根本不需要单元测试:
def validatePassword(password: String): Boolean = {
if (password.length < 8)
return false
var lower = false
var upper = false
var numbers = false
var special = false
password.foreach { c =>
if (c.isDigit) numbers = true
else if (c.isLower) lower = true
else if (c.isUpper) upper = true
else special = true
}
lower && upper && numbers && special
}