为了账号安全,请及时绑定邮箱和手机立即绑定

密码REGEX,至少6个字符,至少一个字母和一个数字,并且可以包含特殊字符

/ 猿问

密码REGEX,至少6个字符,至少一个字母和一个数字,并且可以包含特殊字符

45度呼吸 2019-10-19 16:46:56

我需要一个带有条件的正则表达式:

  • 最少6个字符,最多50个字符

  • 必须包含1个字母

  • 必须包含1个数字

  • 可能包含!@#$%^&*()_ +等特殊字符

目前我有模式: (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,50})$

但是,它不允许使用特殊字符,有人为此提供良好的正则表达式吗?

谢谢


查看完整描述

3 回答

?
jeck猫

也许可以使用单个正则表达式,但这使得很难向用户提供他们不遵循的规则的反馈。像这样的更传统的方法会为您提供反馈,您可以在UI中使用该反馈来告诉用户未满足什么pwd规则:


function checkPwd(str) {

    if (str.length < 6) {

        return("too_short");

    } else if (str.length > 50) {

        return("too_long");

    } else if (str.search(/\d/) == -1) {

        return("no_num");

    } else if (str.search(/[a-zA-Z]/) == -1) {

        return("no_letter");

    } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {

        return("bad_char");

    }

    return("ok");

}


查看完整回答
反对 回复 2019-10-19
?
侃侃无极

在jfriend00回答之后,我写了这个小提琴,用一些小的改动来测试他的解决方案,使其更直观:


http://jsfiddle.net/9RB49/1/


这是代码:


checkPwd = function() {

    var str = document.getElementById('pass').value;

    if (str.length < 6) {

        alert("too_short");

        return("too_short");

    } else if (str.length > 50) {

        alert("too_long");

        return("too_long");

    } else if (str.search(/\d/) == -1) {

        alert("no_num");

        return("no_num");

    } else if (str.search(/[a-zA-Z]/) == -1) {

        alert("no_letter");

        return("no_letter");

    } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+\.\,\;\:]/) != -1) {

        alert("bad_char");

        return("bad_char");

    }

    alert("oukey!!");

    return("ok");

}

顺便说一句,它的工作就像一种魅力!;)


最好的问候,当然还要感谢jfriend00!


查看完整回答
反对 回复 2019-10-19
?
不负相思意

满足以下(通用)密码要求的更优雅,更完善的正则表达式是:


^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{5,50}$

这里的优雅之处在于您不必对 $ @#等符号进行硬编码。要接受所有符号,您只是在说:“也接受所有非字母数字字符和数字。” 正则表达式的最后部分{5,50}可以轻松更改,并与字符的最小和最大数目相对应:在此特定示例中,直到5个字符为止,正则表达式返回不匹配的字符(即,至少需要6个字符才能进行验证)。同样,在50个字符之后,它也会返回不匹配项。


查看完整回答
反对 回复 2019-10-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信