我正在进行密码验证,该验证应该只允许a-z 0-9和这些字符"!"#$%&'()*+,-./:;<=>?@[\]^_
{|}〜`
我尝试使用正则表达式,但我对它们不太好,我不确定这是否可行,或者我是不是逃避了正确的字符。
var allowedCharacters = /^[A-Za-Z0-9!"#$%&'()*+,-.\/:;<=>?@[\\]^_`{|}~]+$/;
if (!s.value.match(allowedCharacters)){
displayIllegalTextError();
return false;
}
答案 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,}$