【问题标题】:Test Password with Regex使用正则表达式测试密码
【发布时间】:2011-06-09 22:21:11
【问题描述】:

我想测试一个密码,其中必须至少有 6 个字符和 1 个数字。我可以在 JS 中使用什么正则表达式字符串来完成这项工作?

已更新 我忘了写它必须至少有 6 个字母字符和 1 个数字字符,但它也应该允许特殊字符或任何其他字符。你能修改你的答案吗?非常感谢您的回复

【问题讨论】:

标签: javascript regex


【解决方案1】:

这确实有点像家庭作业问题,但是哦。实际上,您可以使用单个正则表达式和“前瞻”功能简洁地完成此操作。

/(?=.{6}).*\d.*/.test("helelo1")

括号中的第一位表示“向前看是否有 6 个字符”。在此之后,我们检查任意数量的字符,然后是一个数字,然后是任意数量的字符。

甚至可以在单个正则表达式中实现您的目标,而无需具备前瞻性的能力......查看解决方案而不是畏缩有点困难:

new RegExp("[0-9].....|" +
           ".[0-9]....|" +
           "..[0-9]...|" +
           "...[0-9]..|" +
           "....[0-9].|" +
           ".....[0-9]").test("password1")

【讨论】:

  • +1 表示您的第二个正则表达式既聪明又糟糕。我会把第一个写成/(?=.*\d).{6,}/,但它是tomayto/tomahto。
  • 第二个正则表达式不起作用。要求说“至少 6 个字符”,因此从技术上讲,您需要无限数量的这些行。
  • 实际上,@cwolves,它会起作用的。如果你用 ^ 开始你的正则表达式并用 $ 结束它,你只需要无限多的行。
【解决方案2】:

试试这个:

password.match(/(?=.*\d).{6}/);

更多信息here

【讨论】:

  • @cwolves - 仔细观察,你是对的。如果它是/^(?=.*\d).{6}$/,那只会是真的,这意味着这实际上非常聪明,现在我想了想。 +1。
  • 好点。此表达式最适合查找 if 字符串匹配,但不适用于匹配整个密码。
  • 仅供参考,正则表达式实际上更快,这是因为引擎可以在达到 6 个字符后立即退出并说“真”。唯一的缺点是这允许 anything,甚至是空格、制表符、nul 字符等。
【解决方案3】:

据我所知,最好结合使用字符串函数和正则表达式:

if( myPass.match(/[a-zA-Z]/).length >= 6 && myPass.match(/\d/g).length ) {
    // Good passwords are good!
}

编辑:更新以包含新规定。允许使用特殊字符,但不是必需的。

【讨论】:

  • 我同意,我不确定您是否可以使用直接的正则表达式来做到这一点。
【解决方案4】:
if (/.{6,}/.test(password) && /\d/.test(password)) {
    // success
} else {
    // fail
}

【讨论】:

  • 不允许使用特殊字符吗?
  • 是的。 Spec 从未说过其他话。
【解决方案5】:
/^(?=[\w\d]{6,}$)(?=.*\d)/.test(password)
  • 需要 6 个或更多字符(字母、数字或 _)
  • 至少需要一位数字
  • 不允许任何特殊字符

【讨论】:

  • 为什么不允许特殊字符?
  • @Justin - 只是说这不允许他们。您只需调整[\w\d] 以允许任何您想要的。
  • 啊,有道理。顺便说一句,[\w\d] 实际上是多余的; \w 包括数字。 regular-expressions.info/charclass.html#shorthand
【解决方案6】:

这是一个检查密码的js,

它检查最少 7 个字符,包含 1 个大写字母和 1 个数字以及 1 个特殊字符,并且不能包含空格,希望对您有所帮助。

 pwLength = this.value.length;

if (pwLength > 7 && pwLength < 21) {
        charLengthIcon.removeClass("fail").addClass("pass");
}
else charLengthIcon.removeClass("pass").addClass("fail");

if (this.value.match(/[A-Z]/g)) {
    capLetterIcon.removeClass("fail").addClass("pass");
}
else capLetterIcon.removeClass("pass").addClass("fail");

if (this.value.match(/[0-9]/g)) {
    numberIcon.removeClass("fail").addClass("pass");
}
else numberIcon.removeClass("pass").addClass("fail");

if (this.value.match(/[@#$%!$&~*^(){}?><.,;:"'-+=|]/g)) {
    splcharIcon.removeClass("fail").addClass("pass");
}
else splcharIcon.removeClass("pass").addClass("fail");

if (this.value.match(/[\s/]/g)) {
    whiteSpce.removeClass("pass").addClass("fail");
}
else whiteSpce.removeClass("fail").addClass("pass");


confirmPW();

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2021-10-17
    相关资源
    最近更新 更多