【问题标题】:Javascript regex validate password string (escaping punctuations)Javascript 正则表达式验证密码字符串(转义标点符号)
【发布时间】:2012-01-06 19:19:57
【问题描述】:

我正在尝试使用 javascript 验证密码字符串,并且需要一些有关正则表达式的帮助。我尝试了一些教程,但我认为我在理解如何转义量词和/或元字符时遇到了一些问题。

我想确保密码字符串仅包含来自以下范围的一个或多个(最多 32 个)字符:

"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"012345678901234567890123456789"
"!@#%&/(){}[]=?+*^~-_.:,;"

前三个跨度很容易,但我不知道最后一个。基本上我的脚本看起来像这样:

var password = "user_input_password";

if (/^[A-Za-z0-9!@#$%...]{1,32}$/.test(password)) {
    document.write('OK');
} else {
    document.write('Not OK');
}

非常感谢任何帮助或输入,谢谢!

【问题讨论】:

    标签: javascript regex escaping punctuation


    【解决方案1】:

    通常,您可以使用反斜杠 \ 转义元字符;但是,在字符类中,您唯一需要转义的只有 ]\-^ 仅在一开始就有意义)。像[\w!@#%&/(){}[\]=?+*^~\-.:,;] 这样的东西会做你想做的事。

    \w 等于 [A-Za-z0-9_]

    所以完整的测试应该是这样的:

    /^[\w!@#%&/(){}[\]=?+*^~\-.:,;]{1,32}$/.test(password)
    

    【讨论】:

    • 您还需要使用空格“-”符号。它定义了 [] 内的范围。
    • 是的,你是对的。我什至在我的回答中注意到了这一点,但将其排除在代码之外。
    【解决方案2】:
    /^[A-Za-z0-9!@#%&\/(){}\[\]=?+*^~\-_\.:,;]{1,32}$/
    

    【讨论】:

    • 我认为您不需要转义 [./
    【解决方案3】:

    您还可以匹配所有不被视为空格的字符(空格、换行符、制表符)

    /^[^\s]{1,32}$/.test(password);
    

    要排除引号(我在您的示例中没有看到它们),您可以将它们添加到:

    /^[^\s'"]{1,32}$/.test(password);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2010-09-21
      相关资源
      最近更新 更多