猿问

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

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

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

  • 必须包含1个字母

  • 必须包含1个数字

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

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

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

谢谢


开心每一天1111
浏览 1807回答 3
3回答

jeck猫

也许可以使用单个正则表达式,但这使得很难向用户提供他们不遵循的规则的反馈。像这样的更传统的方法会为您提供反馈,您可以在UI中使用该反馈来告诉用户未满足什么pwd规则:function checkPwd(str) {&nbsp; &nbsp; if (str.length < 6) {&nbsp; &nbsp; &nbsp; &nbsp; return("too_short");&nbsp; &nbsp; } else if (str.length > 50) {&nbsp; &nbsp; &nbsp; &nbsp; return("too_long");&nbsp; &nbsp; } else if (str.search(/\d/) == -1) {&nbsp; &nbsp; &nbsp; &nbsp; return("no_num");&nbsp; &nbsp; } else if (str.search(/[a-zA-Z]/) == -1) {&nbsp; &nbsp; &nbsp; &nbsp; return("no_letter");&nbsp; &nbsp; } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {&nbsp; &nbsp; &nbsp; &nbsp; return("bad_char");&nbsp; &nbsp; }&nbsp; &nbsp; return("ok");}

不负相思意

满足以下(通用)密码要求的更优雅,更完善的正则表达式是:^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d^a-zA-Z0-9].{5,50}$这里的优雅之处在于您不必对 $ @#等符号进行硬编码。要接受所有符号,您只是在说:“也接受所有非字母数字字符和数字。” 正则表达式的最后部分{5,50}可以轻松更改,并与字符的最小和最大数目相对应:在此特定示例中,直到5个字符为止,正则表达式返回不匹配的字符(即,至少需要6个字符才能进行验证)。同样,在50个字符之后,它也会返回不匹配项。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答