用于密码的正则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 – 简单地说 – 匹配非单词字符(包括数字)和非空白字符。 总而言之,这里是对我有用的东西…

  • 至less8字符
  • 至less1数字字符
  • 至less有1小写字母
  • 至less1大写字母
  • 至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) }); 
  1. 至less有一个大写英文字母
  2. 至less有一个小写英文字母
  3. 至less有一个数字
  4. 至less有一个特殊字符

试试这个:

  1. 最less六个字符
  2. 至less有一个大写字符
  3. 至less有一个小写字符
  4. 至less有一个特殊字符

expression:

 "/^(?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/" 

可选特殊字符:

  1. 至less有一个特殊字符
  2. 至less有一个号码
  3. 特殊字符是可选的
  4. 最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,}"