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

时间:2012-03-27 02:22:54

标签: javascript regex

我知道之前已经问过,但我发现的所有答案在某些情况下都无法正常工作。

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

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

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

现在我需要在Javascript中使用类似的功能,但无法知道如何操作。

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

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

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

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

JS上有没有其他解决方案,或者实际上是正则表达式错误吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

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

 - / [ \ ] ^

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

当你出现这些角色时,你并没有逃脱这些角色,有些角色甚至都不包括在内。此外,当您指定不允许使用\s时,您将包含空格。最后,除非我太快看了你的正则表达式,否则你没有包含数字。为了解决您的订单导致正则表达式失败的问题,订单与字符类无关。

更正的正则表达式:

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

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

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

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

此外,您还需要检查服务器端的密码。您的客户端代码可以轻松绕过,因此您应始终在服务器端进行验证以防止这种情况发生。客户端代码对于即时反馈非常有用,但在这种情况下并不多。

正如Qtax所指出的,以下情况会稍微缩短并完成同样的事情:

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

答案 1 :(得分:0)

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

/^\S+$/​

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