7

正则表达式密码复杂性要求any three在创建或更改密码时必须应用以下四个特征。

  • 字母字符 - 至少 1 个大写字母字符
  • 字母字符 - 至少 1 个小写字母字符
  • 数字字符 - 至少 1 个数字字符
  • 特殊字符 - 至少 1 个特殊字符

我正在尝试使用以下代码,但它不适用于special characters

(?=^.{6,}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*

我希望针对以下 4 种情况验证我的正则表达式

火柴盒

  • P@ssword
  • 密码1
  • p@ssword1
  • 电话@12345
4

6 回答 6

7

我认为在这种情况下,单个正则表达式会很混乱。你可以轻松地做类似的事情

var count = 0;

count += /[a-z]/.test(password) ? 1 : 0;
count += /[A-Z]/.test(password) ? 1 : 0;
count += /\d/.test(password) ? 1 : 0;
count += /[@]/.test(password) ? 1 : 0;

if(count > 2) {
    alert('valid')
}
于 2013-06-14T07:13:17.743 回答
7

我认为您可以使用的正则表达式是:

(?=^.{6,}$)(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^A-Za-z0-9]).*

我不确定为什么您的正则表达式中有这么多或运算符,但是如果:

  • (?=^.{6,}$)- 字符串 > 5 个字符
  • (?=.*[0-9])- 包含一个数字
  • (?=.*[A-Z])- 包含一个大写字母
  • (?=.*[a-z])- 包含一个小写字母
  • (?=.*[^A-Za-z0-9])- 不是字母数字的字符。

正则表达式图片

于 2013-06-14T07:37:24.887 回答
2

使用这个正则表达式:

(?=^.{6,10}$)(?=. \d)(?=. [az])(?=. [AZ])(?=. [!@#$%^&*() _+}{":;'?/>.<,])(?!. \s). $**

于 2013-06-14T07:40:23.663 回答
0

我认为所有特殊字符也需要这个:[更新为拒绝空格]

    $(document).ready(function(){
    $('input').change(function(){
    var count = 0;
    var pass = $(this).val();
        count += /[a-z]/.test(pass) ? 1 : 0;
        count += /[A-Z]/.test(pass) ? 1 : 0;
        count += /\d/.test(pass) ? 1 : 0;
        count += /[^\w\d\s]/.test(pass) ? 1 : 0;
        (count>2 & !/[\s]+/.test(pass)) ? $(this).css('background-color','lime'):$(this).css('background-color','orange');
    });

});

和小提琴:jsFiddle

于 2013-06-14T07:36:03.110 回答
0
var pattern = new RegExp(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]).{6,}$/);

    if(pattern.test(value)){
         return true;
    } else {
         return false;
    }

它的特殊字符也可以正常工作。

于 2018-05-27T13:17:48.950 回答
0

非英语 UTF-8

给出的解决方案都不允许使用国际字母,即éÉöÖæÆáÁ,但主要关注英文ASCII字母。

以下正则表达式使用 unicode UTF-8 来识别大小写,因此允许使用国际字符:

// Match uppercase, lowercase, digit or #$!%*?& and make sure the length is 6 to 36 in length  
const pwdFilter = /^(?=.*\p{Ll})(?=.*\p{Lu})(?=.*[\d|@#$!%*?&])[\p{L}\d@#$!%*?&]{6,36}$/gu

if (!pwdFilter.test(pwd)) {
    // Show error that password has to be adjusted to match criteria
}

正则表达式:

/^(?=.*\p{Ll})(?=.*\p{Lu})(?=.*[\d|@#$!%*?&])[\p{L}\d@#$!%*?&]{6,36}$/gmu

检查密码中是否使用了大写、小写、数字或@#$!%*?&。它还将长度限制为最小 6 个和最大 36 个(请注意,表情符号 ‍,在长度中算作多个字符)。最后u,是为了使用UTF-8。

于 2022-01-31T10:59:21.423 回答