Jquery或JS:如何检查字符串中的无效字符

Jquery or JS: How to check for invalid chars on a string?

本文关键字:字符串 字符 无效 检查 JS 何检查 Jquery      更新时间:2023-09-26

我知道以前有人问过这个问题,但在某些情况下,我找到的所有答案都不正确。

我需要验证一个密码字段,并且只允许使用某些字符。

验证在客户端和服务器端都完成。在PHP上,我也无法根据需要执行regex,所以我所做的是将密码拆分为一个字符数组,并根据允许的字符数组检查每个字符。如果数组中没有任何字符,则返回false。

允许的字符为0-9、a-z、a-z和`!"?$%^&*()_-+={[}]:;@~#|<,>.'/''(不允许使用空格)。

现在我在Javascript中需要一些类似的东西,但我不知道如何做到

Regex不能正常工作,因为它有时会在没有无效字符的情况下失败(可能是因为字符顺序?)。我从这个网站得到的当前正则表达式是

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

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

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

JS上还有其他解决方案吗?或者regex实际上是错误的吗?

谢谢你的帮助!

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

 - / [ ' ] ^

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

当这些角色出现时,你无法逃离它们,其中一些甚至不包括在内。此外,当您指定不允许使用's时,您将在其中包含空白。最后,除非我看得太快,否则您没有包含数字。为了解决您的担忧,即顺序是导致正则表达式失败的原因,顺序在字符类中不相关。

修正后的正则表达式:

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

这是一个"测试套件"。我并不声称它是傻瓜式的,但它似乎运行良好:

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

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

此外,您还需要在服务器端检查密码。您的客户端代码可以很容易地绕过,所以您应该始终在服务器端进行验证以防止这种情况发生。客户端代码对即时反馈很有用,但在这种情况下没有太多其他功能。

正如Qtax所指出的,以下内容将稍微简短一点,并完成相同的事情:

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

看起来您想要接受除空白之外的所有字符。这是正确的吗?如果是这样的话,您可以在JS中用以下正则表达式匹配除空白之外的所有内容:

/^'S+$/​

示例:http://jsfiddle.net/jnQcd/2/