识别字符串中的特殊非字母数字字符

时间:2014-02-20 16:43:56

标签: javascript regex

我正在进行密码验证,该验证应该只允许a-z 0-9和这些字符"!"#$%&'()*+,-./:;<=>?@[\]^_ {|}〜`

我尝试使用正则表达式,但我对它们不太好,我不确定这是否可行,或者我是不是逃避了正确的字符。

var allowedCharacters = /^[A-Za-Z0-9!"#$%&'()*+,-.\/:;<=>?@[\\]^_`{|}~]+$/;
if (!s.value.match(allowedCharacters)){
  displayIllegalTextError();
  return false;
}

3 个答案:

答案 0 :(得分:2)

您需要将短划线放在正则表达式的开头或结尾处,否则它会尝试创建一个字符范围(,-.)。然后,a-Z不是有效范围,您可能需要a-z。此外,您需要转义右括号:

/^[A-Za-z0-9!"#$%&'()*+,.\/:;<=>?@[\\\]^_`{|}~-]+$/

答案 1 :(得分:2)

查看ascii图表 here 我看到你的正则表达式可以缩小到这个字符范围:

/^[\x21-\x7e]+$/

如果你只是想学习角色类的特殊行为,你应该阅读 通过正则表达式基础教程 请注意,不同口味的班级行为有所不同。

答案 2 :(得分:0)

使用unicode更简单,更直观:^[\u0021-\u007E]+$

/^[\u0021-\u007E]+$/.test('MyPassword!') // returns true
/^[\u0021-\u007E]+$/.test('MyPassword™') // returns false

现在,如果您想更进一步,实际创建一个更复杂的验证,例如:最小长度为8个字符,至少有一个小写,一个大写,一个数字和一个特殊字符:

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9])[\u0021-\u007E]{8,}$
相关问题