Regex for password must contain at least eight characters, at least one number and both lower and uppercase letters and special characters
我想要一个正则表达式来检查:
密码至少包含八个字符,包括至少一个数字,并且包括小写和大写字母以及特殊字符,例如
它不能是您的旧密码,也不能包含您的用户名、
这里是我的验证表达式,它适用于八个字符,包括一个大写字母、一个小写字母和一个数字或特殊字符。
1 2 | (?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![. ])(?=.*[A-Z])(?=.*[a-z]).*$" |
如何为密码编写密码必须是八个字符,包括一个大写字母、一个特殊字符和字母数字字符?
至少八个字符,至少一个字母和一个数字:
1 | "^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$" |
至少八个字符,至少一个字母、一个数字和一个特殊字符:
1 | "^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$" |
最少八个字符,至少一个大写字母、一个小写字母和一个数字:
1 | "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$" |
最少八个字符,至少一个大写字母、一个小写字母、一个数字和一个特殊字符:
1 | "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$" |
最少8个字符,最多10个字符,至少一个大写字母、一个小写字母、一个数字和一个特殊字符:
1 | "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$" |
您可以将此regex与多个lookahead断言(条件)一起使用:
1 | ^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$ |
此regex将强制执行以下规则:
- 至少一个大写英文字母,
(?=.*?[A-Z]) 。 - 至少一个小写英文字母,
(?=.*?[A-Z]) 。 - 至少一个数字,
(?=.*?[0-9]) 。 - 至少一个特殊字符,
(?=.*?[#?!@$%^&*-]) 。 - 长度至少为8英寸的
.{8,} (带锚)
正则表达式没有and运算符,因此很难编写一个与有效密码匹配的regex,当有效性由某物和其他某物以及其他某物定义时…
但是,正则表达式确实有一个或运算符,因此只需应用demorgan定理,并编写一个与无效密码匹配的regex:
少于八个字符的任何东西,或没有数字的任何东西,或没有大写字母的任何东西,或没有小写字母的任何东西,或没有特殊字符的任何东西。
所以:
1 | ^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$ |
如果有匹配的内容,那么它是一个无效的密码。
@anubhava的答案只有一个小小的改进:因为特殊字符仅限于键盘上的字符,所以任何特殊字符都可以使用这个:
此regex将强制执行以下规则:
- 至少一个大写英文字母
- 至少一个小写英文字母
- 至少一个数字
- 至少一个特殊字符
- 最小长度8
根据我的情况,我很难找到最受欢迎的答案。例如,我的验证失败了,使用了诸如
- 至少
8 个字符 - 至少
1 数字字符 - 至少
1 小写字母 - 至少
1 大写字母 - 至少
1 特殊字符
1 | /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/ |
JSfiddle链接-简单的演示涵盖了各种情况
更"通用"的版本(?)不允许英文字母作为特殊字符。
1 | ^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | var 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(function (pw) { document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>'); }); |
导入javascript文件
您可以使用此方法:
1 2 3 | $.validator.addMethod("pwcheck", function (value) { return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value) }); |
试试这个:
表达式:
1 | "/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/" |
可选特殊字符:
表达式:
1 | "/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/" |
如果不需要最小和最大条件,则取下
- 6是最小字符限制
- 20是最大字符限制
- ?=表示匹配表达式
1 2 3 4 5 6 7 8 9 10 | Use the following Regex to satisfy the below conditions: Conditions: 1] Min 1 uppercase letter. 2] Min 1 lowercase letter. 3] Min 1 special character. 4] Min 1 number. 5] Min 8 characters. 6] Max 30 characters. Regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/ |
我会回复彼得·莫特森,但我的名声不够好。
他的表述完全符合每一个规定的最低要求。他的表达式不需要特殊字符的问题是,它们也不允许特殊字符,因此它们也强制执行最大要求,我不相信OP请求的。通常情况下,您希望允许用户将其密码设置为他们想要的强密码;为什么要限制强密码?
因此,他的"最少八个字符,至少一个字母和一个数字"表达式:
达到最低要求,但其余字符只能是字母和数字。要允许(但不要求)特殊字符,应使用如下内容:
或
同样,"至少八个字符,至少一个大写字母、一个小写字母和一个数字:
满足最低要求,但只允许字母和数字。用途:
或
不是直接回答这个问题,但它真的必须是正则表达式吗?
我曾经做过很多Perl,并习惯于用regex解决问题。然而,当它们变得更加复杂,有了所有的外观和其他怪癖时,您需要编写几十个单元测试来杀死所有这些小错误。
此外,regex通常比命令式或函数式解决方案慢几倍。
例如,下面的scala函数(不是非常fp)解决了原始问题,其速度大约是最流行答案regex的三倍。它的作用也很明显,您根本不需要单元测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 } |
根据您的需要,这种模式应该可以正常工作。试试这个,
1 | ^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,} |
只需创建一个字符串变量,分配模式,并创建一个布尔方法,如果模式正确,返回true,否则返回false。
Sample:
1 2 3 4 5 6 | String pattern ="^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}"; String password_string ="Type the password here" private boolean isValidPassword(String password_string) { return password_string.matches(Constants.passwordPattern); } |
我在这里发现了很多问题,所以我自己做了。
在这里,它是在所有的荣耀中,通过测试:
1 | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$ |
https://regex101.com/r/dcrr65/4/tests/测试
注意事项:
1 | (?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6} |
@Clasg已经建议:
1 | ^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$ |
但它不接受下划线作为特殊字符(如aa12345)。
一个改进的方法是:
1 | ^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$ |
Use the following Regex to satisfy the below conditions:
1 2 3 | Conditions: 1] Min 1 special character. 2] Min 1 number. 3] Min 8 characters or More |
Regex:
^(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,}$ Can Test Online: https://regex101.com
只是我们可以通过使用HTML5来做到这一点。
在模式属性中使用下面的代码,
1 2 | pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![. ])(?=.*[A-Z])(?=.*[a-z]).*$" |
它会很好地工作。
您可以使用下面的正则表达式模式来检查密码是否符合您的期望。
1 | ((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20}) |
在Java/Android中,用至少一个数字、一个字母、一个特殊字符来测试密码:
1 | "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$" |
试试这个:
1 | ^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$ |
这个正则表达式非常适合我。
1 2 3 4 5 6 | function myFunction() { var str ="c1TTTTaTTT@"; var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$"); var res = patt.test(str); console.log("Is regular matches:", res); } |
模式至少匹配1个大写字符、1个数字和任何特殊字符,长度在8到63之间。
"^?= [-Z])(?= [-Z])(?=.*d)[a-z a-zdw]8,63$"
这种模式用于Java编程。
希望下面的内容能起作用。我在Azure自定义策略中尝试过。
^?= [-Z])(?= [-Z])(?= .d)(?)=.[@$%^&;*-+=[]:',?/
1 | (?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$ |
在线链接检查https://regex101.com/r/mqgurh/1
我在前面的一个答案中发现的一个解决方案是:
至少8个字符,至少1个大写字母、1个小写字母、1个数字和1个特殊字符:"^?= [-Z])(?= [-Z])(?= .d)(?)= $$!%?&;])[a-z a-zd$@$!%?{ 8,}
…不适用于我,但以下是一个简化版本,效果很好(添加您喜欢的任何特殊字符,我在此处添加),并像添加字母一样添加数字规则:
1 | "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&]){8,}" |