密码的正则表达式必须包含至少八个字符,至少一个数字以及大写和小写字母和特殊字符

时间:2013-10-26 09:42:11

标签: javascript asp.net regex

我想要一个正则表达式来检查:

密码至少包含八个字符,包括至少一个数字,包括小写和大写字母以及特殊字符,例如#?!

它不能是您的旧密码或包含您的用户名"password""websitename"

这是我的验证表达式,包含一个大写字母,一个小写字母和一个数字或特殊字符,用于八个字符。

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

如何为编写密码,密码必须是8个字符,包括一个大写字母,一个特殊字符和字母数字字符

36 个答案:

答案 0 :(得分:877)

最少八个字符,至少一个字母和一个数字:

"^(?=.*[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,}$"

最少8个字符和最多10个字符,至少一个大写字母,一个小写字母,一个数字和一个特殊字符:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"

答案 1 :(得分:283)

您可以将此正则表达式用于多个lookahead assertions (conditions)

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$

此正则表达式将强制执行以下规则:

  • 至少一个大写English letter(?=.*?[A-Z])
  • 至少一封小写英文字母(?=.*?[a-z])
  • 至少一位数,(?=.*?[0-9])
  • 至少一个特殊字符(?=.*?[#?!@$%^&*-])
  • 长度最少八个.{8,}(带锚点)

答案 2 :(得分:53)

正则表达式没有AND运算符,因此编写与有效密码匹配的正则表达式非常困难,当有效性由某些东西和其他东西定义时,其他东西......

但是,正则表达式确实有一个OR运算符,所以只需应用DeMorgan定理,并编写一个匹配无效密码的正则表达式:

少于八个字符的任何内容任何没有数字的内容任何没有大写的内容或任何没有小写的内容任何没有特殊字符的东西。

所以:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

如果有任何匹配,则表示密码无效。

答案 3 :(得分:29)

@ anubhava的回答只是一个小小的改进:由于特殊字符仅限于键盘中的特殊字符,因此将其用于任何特殊字符:

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

此正则表达式将强制执行以下规则:

  • 至少一个大写英文字母
  • 至少一封小写英文字母
  • 至少一位数
  • 至少一个特殊字符
  • 最少八个长度

答案 4 :(得分:20)

对于我的情况,我遇到了最受欢迎的答案。例如,我的验证失败了;[等字符。我对列入我的特殊字符不感兴趣,所以我反而使用[^\w\s]作为测试 - 简单地把 - 匹配非单词字符(包括数字)和非空白字符。总结一下,这对我有用......

  • 至少8个字符
  • 至少1数字字符
  • 至少1小写字母
  • 至少1大写字母
  • 至少1特殊字符
/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

JSFiddle Link - 涵盖各种案例的简单演示

答案 5 :(得分:13)

导入JavaScript文件jquery.validate.min.js

您可以使用此方法:

$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
  1. 至少一个大写英文字母
  2. 至少一封小写英文字母
  3. 至少一位数
  4. 至少一个特殊字符

答案 6 :(得分:13)

更多"泛型"版本(?),不允许任何英文字母作为特殊字符

^(?=\S*[a-z])(?=\S*[A-Z])(?=\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*[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/>');
  });
&#13;
&#13;
&#13;

答案 7 :(得分:9)

Try this one:

  1. Minimum six characters
  2. At least one uppercase character
  3. At least one lowercase character
  4. At least one special character

Expression:

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

Optional Special Characters:

  1. At least one special character
  2. At least one number
  3. Special characters are optional
  4. Minimum six characters and maximum 16 characters

Expression:

"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"

If the min and max condition is not required then remove .{6, 16}

  • 6 is minimum character limit
  • 20 is maximum character limit
  • ?= means match expression

答案 8 :(得分:8)

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*()_+,.\\\/;':"-]).{8,}$
    

答案 9 :(得分:6)

这对我有用:

{{1}}
  • 至少8个字符;
  • 一个小写字母,一个大写字母,一个数字和一个特殊字符;
  • 没有空格。

答案 10 :(得分:6)

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}$/    

答案 11 :(得分:6)

我会回复Peter Mortensen,但我没有足够的声誉。

他的表达对于每个指定的最低要求都是完美的。他的表达不需要特殊字符的问题是他们也不允许特殊字符,所以他们也强制执行最大要求,我不相信OP要求。通常,您希望允许用户根据自己的需要设置密码;为什么限制强密码?

所以,他的&#34;至少八个字符,至少一个字母和一个数字&#34;表达式:

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$

达到最低要求,但其余字符只能 为字母和数字。要允许(但不要求)特殊字符,您应该使用以下内容:

^(?=.*[A-Za-z])(?=.*\d).{8,}$允许任何字符

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$允许特定的特殊字符

同样,&#34;至少八个字符,至少一个大写字母,一个小写字母和一个数字:&#34;

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

符合最低要求,但允许字母和数字。使用:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$允许任何字符

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}允许特定的特殊字符。

答案 12 :(得分:4)

没有直接回答这个问题,但它真的必须是正则表达式吗?

我曾经做过很多Perl,习惯于用正则表达式解决问题。然而,当他们变得更加复杂,所有的前瞻和其他怪癖时,你需要编写几十个单元测试来杀死所有这些小错误。

此外,正则表达式通常比命令式或功能性解决方案慢几倍。

例如,以下(不是非常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
}

答案 13 :(得分:3)

var strongRegex = new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*])(?=.{8,})");
var mediumRegex = new RegExp("^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})");

最适合 JavaScript

答案 14 :(得分:3)

根据您的需要,这种模式应该可以正常工作。试试这个,

^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}

只需创建一个字符串变量,分配模式,然后创建一个布尔方法,如果模式正确则返回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);
}

答案 15 :(得分:3)

pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}"

答案 16 :(得分:3)

在2020年对此进行测试:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

验证自己

const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
const str = `some12*Nuts`;
let m;

if ((m = regex.exec(str)) !== null) {
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

答案 17 :(得分:2)

对于标准密码要求,我发现这很有用:

  • 至少 1 个字母

  • 至少 1 位数字

  • 不包含空格

  • 可选的特殊字符,例如@$!%*#?&^_-

  • 最少 8 个字符长

    /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&^_-]{8,}$/

您还可以设置上限,例如 {8,32} 最多 32 个字符。

答案 18 :(得分:2)

考虑以下正则表达式解决方案:

^(?=.*[\w])(?=.*[\W])[\w\W]{8,}$

验证以下内容:

  1. 至少一个小写字母
  2. 至少一个大写字母
  3. 至少一位数字
  4. 至少一个特殊字符
  5. 至少应该有8个字符长。

通过以下链接https://regex101.com/r/qPmC06/4/

进行检查

答案 19 :(得分:2)

演示:

ngOnInit() {
    ...

    //post data
    this.Service.client = {
      id: 0,
      name: null,
      phone: null,
      address: null,
      account: 0,
      nots: null,
      branchId: null, 
      type: null,
    }
function password_check() {
  pass = document.getElementById("password").value;
  console.log(pass);
  regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
  if (regex.exec(pass) == null) {
    alert('invalid password!')
  }
  else {
    console.log("valid");
  }
}

答案 20 :(得分:2)

我在这里发现了很多问题,所以我自己做了。

通过测试,这就是它的全部荣耀:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$

https://regex101.com/r/DCRR65/4/tests

要注意的事情:

  1. 不使用\w,因为其中包括我正在测试的_
  2. 我在匹配符号而没有匹配行尾时遇到很多麻烦。
  3. 没有具体指定符号,这还因为不同的语言环境可能希望在其键盘上使用不同的符号。

答案 21 :(得分:2)

@ClasG已经suggested

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

但它不接受_(下划线)作为特殊字符(例如Aa12345 _)。

改进的是:

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$

答案 22 :(得分:2)

(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}

答案 23 :(得分:1)

您可以使用下面的正则表达式模式来检查密码是否符合您的期望。

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})

答案 24 :(得分:1)

我们可以使用HTML5来实现这一目标。

在模式属性

中使用以下代码
pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

它会完美运作。

答案 25 :(得分:1)

使用此

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%?=*&]).{8,20})

它将验证至少一个小写字母,一个大写字母,一个数字以及(!,@,#,$,%,?,=,*,&)的特殊字符。

最小长度为8,最大长度为20

答案 26 :(得分:1)

  

使用以下Regex来满足以下条件:

Conditions: 1] Min 1 special character.
            2] Min 1 number.
            3] Min 8 characters or More
  

正则表达式:^(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,}$

     

可在线测试:https://regex101.com

答案 27 :(得分:0)

希望以下作品。我在Azure自定义策略中尝试过此操作。

^(?=。 [az])(?=。 [AZ])(?=。 \ d)(?=。 [@#$% ^&* -_ + = [] {} | \:',?/ ~&quot;();!])([A-Za-z\d@#$%^&amp;*\-_+=[\]{}|\\:',?/〜“();!] |。(?!@)){6,16} $

答案 28 :(得分:0)

(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

在线链接检查https://regex101.com/r/mqGurh/1

答案 29 :(得分:0)

我实际上只是在这里复制了第一个答案,并将其变成了一个更方便用户使用的正则表达式,它需要一个高位,一个低位和至少8个字符,但可以接受“介于两者之间”的所有字符。

这是一个示例正则表达式,需要

  1. 至少8个字符的长度
  2. 至少一个小写字母
  3. 至少一个大写字母

重要:此正则表达式还将排除所有其他字符,例如数字,特殊字符,例如$,#、! -只要规则1.至3.匹配输入字符串

^(?=.*[a-z])(?=.*[A-Z]).{8,}$

注意“。”正则表达式末尾的alomst。几乎可以匹配任何(和afaik任何可读的)字符

答案 30 :(得分:0)

模式匹配至少1个大写字母,1个数字和任何特殊字符,长度在8到63之间。

“^(?= [AZ])(?=。 [AZ])(?=。* \ d)[A-ZA-Z \ d \ W] {8, 63} $“

此模式用于JAVA编程。

答案 31 :(得分:0)

试试这个:

^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$

这个正则表达式非常适合我。

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);
}

答案 32 :(得分:0)

/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*$/

这是验证至少 1个大写字母1个小写字母和1个数字的简单方法

这是我在快速验证中使用的示例

check('password')
    .notEmpty()
    .withMessage('Password cannot be null')
    .bail()
    .isLength({ min: 6 })
    .withMessage('Password must be at least 6 characters')
    .bail()
    .matches(/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*$/)
    .withMessage(
      'Must have atleast 1 uppercase, 1 lowercase letter and 1 number'
    ),

答案 33 :(得分:0)

在Java / Android中,使用以下模式测试至少包含一个数字,一个字母,一个特殊字符的密码:

"^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$"

答案 34 :(得分:0)

     var value=$("#password").val();
     $.validator.addMethod("strongePassword",function(value) 
     {
         return /^[A-Za-z0-9!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]*$/.test(value) && /[a-z]/.test(value) && /\d/.test(value) && /[A-Z]/.test(value)&& /[A-Z]/.test(value);`enter code here`
     },'Password must have minimum 9 characters and contain at least 1 UPPERCASE, 1 lower case, 1 number, 1 special character.');

答案 35 :(得分:-1)

我在上一个答案中找到的解决方案:

至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:     “^(?=。 [AZ])(?= [AZ])(?=。 \ d)(?= [$ @ $!%< ?/ EM>&安培;!?])[A-ZA-Z \ d $ @ $%的&安培;] {8,}“

...对我来说不起作用,但以下是一个简化版本,效果很好(添加你喜欢的任何特殊字符,我在这里添加#),并添加数字规则,就像你对字母一样:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&]){8,}"