用于密码的正则expression式必须包含至less八个字符,至less一个数字以及大写字母和特殊字符
我想要一个正则expression式来检查:
密码至less包含八个字符,包括至less一个数字,并且包含大小写字母和特殊字符,例如#
?
, !
。
它不能是您的旧密码或包含您的用户名, "password"
或"websitename"
这里是我的validationexpression式,它是八个字符,包括一个大写字母,一个小写字母,一个数字或特殊字符。
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[AZ])(?=.*[az]).*$"
我怎么写密码必须是八个字符,包括一个大写字母,一个特殊字符和字母数字字符 ?
最less八个字符,至less一个字母和一个数字:
"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"
最less八个字符,至less一个字母,一个数字和一个特殊字符:
"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$"
最less八个字符,至less一个大写字母,一个小写字母和一个数字:
"^(?=.*[az])(?=.*[AZ])(?=.*\d)[a-zA-Z\d]{8,}$"
最less八个字符,至less一个大写字母,一个小写字母,一个数字和一个特殊字符:
"^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}"
最less8个,最多10个字符,至less一个大写字母,一个小写字母,一个数字和一个特殊字符:
"^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,10}"
你可以使用这个正则expression式:
^(?=.*?[AZ])(?=.*?[az])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
这个正则expression式将执行这些规则:
- 至less有一个大写英文字母
(?=.*?[AZ])
- 至less有一个小写英文字母
(?=.*?[az])
- 至less有一个数字
(?=.*?[0-9])
- 至less有一个特殊字符
(?=.*?[#?!@$%^&*-])
- 至less八个长度
.{8,}
(与锚点)
正则expression式没有AND运算符,所以要写一个匹配有效密码的正则expression式是非常困难的,当有效性由其他东西和其他东西来定义的时候…
但是,正则expression式有一个OR运算符,所以只需应用DeMorgan的定理,然后编写一个匹配无效密码的正则expression式:
任何less于8个字符或任何没有数字的任何东西或任何没有大写OR或任何没有小写字母或任何没有特殊字符的东西。
所以:
^(.{0,7}|[^0-9]*|[^AZ]*|[^az]*|[a-zA-Z0-9]*)$
如果有任何匹配的,那么这是一个无效的密码。
@ anubhava的答案只是一个小小的改进:由于特殊字符限制在键盘中的那些,使用这个任何特殊字符:
^(?=.*?[AZ])(?=(.*[az]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$
这个正则expression式将执行这些规则:
- 至less有一个大写英文字母
- 至less有一个小写英文字母
- 至less有一个数字
- 至less有一个特殊字符
- 最less八个长度
根据我的情况,我遇到了一些困难。 例如,我的validation是失败的字符,如;
或[
我对白名单中的特殊字符不感兴趣,所以我反而利用[^\w\s]
作为testing – 简单地说 – 匹配非单词字符(包括数字)和非空白字符。 总而言之,这里是对我有用的东西…
- 至less
8
字符 - 至less
1
数字字符 - 至less有
1
小写字母 - 至less
1
大写字母 - 至less有
1
特殊字符
/^(?=.*?[AZ])(?=.*?[az])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/
JSFiddle Link – 涵盖各种案例的简单演示
导入JavaScript文件jquery.validate.min.js
。
你可以使用这个方法:
$.validator.addMethod("pwcheck", function (value) { return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[az]/.test(value) && /[0-9]/.test(value) && /[AZ]/.test(value) });
- 至less有一个大写英文字母
- 至less有一个小写英文字母
- 至less有一个数字
- 至less有一个特殊字符
试试这个:
- 最less六个字符
- 至less有一个大写字符
- 至less有一个小写字符
- 至less有一个特殊字符
expression:
"/^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"
可选特殊字符:
- 至less有一个特殊字符
- 至less有一个号码
- 特殊字符是可选的
- 最less6个字符,最多16个字符
expression:
"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"
如果不需要最小和最大条件,则移除.{6, 16}
- 6是最小字符数限制
- 20是最大字符数限制
- ?=表示匹配expression式
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: /^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/
一个更“通用”的版本(?),不允许任何英文字母作为特殊字符 。
^(?=\S*[az])(?=\S*[AZ])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$
var pwdList = [ '@@V4-\3Z`zTzM{>k', '12qw!"QW12', '123qweASD!"#', '1qA!"#$%&', 'Günther32', '123456789', 'qweASD123', 'qweqQWEQWEqw', '12qwAS!' ], re = /^(?=\S*[az])(?=\S*[AZ])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/; pwdList.forEach(function (pw) { document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>'); });
根据你的需要这个模式应该工作得很好。 尝试这个,
^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}
只要创build一个stringvariables,分配模式,并创build一个布尔方法返回true,如果模式是正确的,否则为false。
样品:
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); }
(?=.*[0-9])(?=.*[az])(?=.*[AZ])(?=.*[@#$%^&+-]).{6}
在Java / Android中,使用以下模式至lesstesting一个数字,一个字母,一个特殊字符的密码:
"^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$"
尝试这个:
^.*(?=.{8,})(?=.*[az])(?=.*[AZ])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$
这个正则expression式完美地适用于我。
function myFunction() { var str = "c1TTTTaTTT@"; var patt = new RegExp("^.*(?=.{8,})(?=.*[az])(?=.*[AZ])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$"); var res = patt.test(str); console.log("Is regular matches:", res); }
不直接回答这个问题,但它真的必须是一个正则expression式吗?
我曾经做过很多Perl,习惯用正则expression式来解决问题。 但是,如果所有的前瞻和其他怪癖都变得更加复杂,那么你需要编写几十个unit testing来杀死所有这些小错误。
此外,正则expression式通常比命令式或function性解决scheme慢几倍。
例如,下面的(不是很FP)的Scala函数解决了比最stream行的答案的正则expression式快三倍的原始问题。 它所做的也很清楚,你根本不需要unit testing:
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 }
我在之前的答案中find了一个解决scheme:
最less8个字符,至less1个大写字母,1个小写字母,1个数字和1个特殊字符:“^(?=。 [az])(?=。 [AZ])(?=。 \ d)(?=。 $ @ $!% ?&])[A-Za-z \ d $ @ $!% ?&] {8,}“
…不适合我,但以下是一个简化的版本,效果很好(添加任何你喜欢的特殊字符,我在这里添加了#),并添加数字规则,就像你对字母做的那样:
"^(?=.*[az])(?=.*[AZ])(?=.*[0-9])(?=.*[$@$!%*?&]){8,}"