我知道以前曾有人问过这个问题,但是我发现所有答案在某些情况下都无法正常工作。

我需要验证密码字段并仅允许某些字符。

验证是在客户端和服务器端进行的。在PHP上,我也无法按需执行正则表达式,因此我所做的就是将密码拆分为一个字符数组,并对照允许的字符数组检查每个字符。如果数组中没有任何字符,则返回false。

允许的字符为0-9,a-z,A-Z和`! “?$%^&*()_-+ = {[}]:; @〜#| 。'/ \(不允许使用空格)。

现在,我需要用Javascript做类似的事情,无法弄清楚该怎么做。

正则表达式无法正常工作,因为当没有无效字符时,有时它会失败(可能是因为字符顺序?)。
我从该站点获得的当前正则表达式是

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


因此,有效的密码可以是例如

urjv()$%...84
40#"!!mbn'"{}
890$%/\|`doc
,-=?wht(!{})=


在JS上还有其他解决方案吗,还是正则表达式实际上是错误的?

谢谢你的帮助!

最佳答案

以下字符需要在字符类中转义:

 - / [ \ ] ^


请注意,使用new创建Regex对象时,需要转义的字符不同。

当出现这些字符时,您不会逃脱这些字符,甚至其中的某些字符甚至都不包含在内。另外,当您指定不允许使用\s时,您要在其中包含空格。最后,除非我过快地查看了您的正则表达式,否则您不会包含数字。为了解决您对顺序是导致正则表达式失败的原因的担忧,顺序与字符类无关。

更正的正则表达式:

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


这是一个“测试套件”。我并不是说它是万无一失的,但它似乎可以正常工作:

http://jsfiddle.net/radu/AvGtY/

根据需要更改字典,您应该可以测试大量的正则表达式。请注意,在当前设置中,它仅真正检查一致性-即,它仅检查正则表达式是否找到字典字符串中的所有内容。

另外,您还需要在服务器端检查密码。您可以轻松地绕过客户端代码,因此您应该始终在服务器端进行验证以防止这种情况。客户端代码对于立即反馈很有用,但在这种情况下没有其他用途。

正如Qtax所指出的那样,以下内容要短一些,并且可以完成相同的操作:

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

09-25 16:46
查看更多