jquery JavaScript中的Regex密码验证

35g0bw71  于 11个月前  发布在  jQuery
关注(0)|答案(7)|浏览(118)

Regex密码复杂性要求在创建或更改密码时必须应用以下四个特征中的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@ sword
  • Password1
  • p@ssword1
  • 联系电话:0531 - 8888888
fwzugrvs

fwzugrvs1#

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

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

字符串
我不知道为什么你的正则表达式中有这么多的or运算符,但如果:

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

x1c 0d1x的数据

avwztpqn

avwztpqn2#

我认为在这种情况下,单个正则表达式会很混乱。

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

字符串

v2g6jxz6

v2g6jxz63#

使用Regex:

*(?=^.{6,10}$)(?=.\d)(?=. [a-z])(?=.[A-Z])(?=.[!@#$%^&*()_+}{":?/>.<,])(?!.\s).$

wf82jlnq

wf82jlnq4#

我想你也需要这个来处理所有的特殊字符:[更新为拒绝空格]

$(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

eivnm1vs

eivnm1vs5#

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

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

字符串
它的工作也很好,有特殊的性格。

ssm49v7z

ssm49v7z6#

非英文UTF-8

没有一个解决方案允许国际字母,即éÉöÖæá,但主要集中在英语ASCII字母表上。
下面的regEx使用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
}

字符串
regEx:
/^(?=.*\p{Ll})(?=.*\p{Lu})(?=.*[\d|@#$!%*?&])[\p{L}\d@#$!%*?&]{6,36}$/gmu
检查密码中是否使用了字母、数字、数字或@#$!%*?&。它还限制长度为最小6个字符,最大36个字符(请注意,表情符号,在长度中计为多个字符)。最后的u,用于使用UTF-8。😀🇺🇸🇪🇸🧑‍💻

s71maibg

s71maibg7#

要匹配特殊字符,只需列出lookahead中的所有特殊字符。参见下面的代码。

const pattern1 = /(?=\D)/; // non-digit character match
const pattern2 = /(?=.*[~`!@#$%^&*()--+={}\[\]|\\:;"'<>,.?/_₹])/; // at least one special char exists

字符串
或者,假设你的正则表达式模式已经像模式3那样搜索数字和字母,唯一不匹配的是非数字,这是你的特殊字符。因此你也可以找到非数字字符的匹配!像模式4一样。

const pattern3 =
    /^(?=.*\d)(?=.*[~`!@#$%^&*()--+={}\[\]|\\:;"'<>,.?/_₹])(?=.*[a-z])(?=.*[A-Z]).{5,10}$/;
  const pattern4 =
    /^(?=.*\d)(?=.*\D)(?=.*[a-z])(?=.*[A-Z]).{5,10}$/;


有关语法或前瞻的详细解释,您可以阅读下面的文章。
https://medium.com/p/19fc2b2a299c

相关问题