2012-03-27 50 views
1

我知道这已经被问过,但我发现的所有答案在某些情况下无法正常工作。Jquery或JS:如何检查字符串上的无效字符?

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

验证在客户端和服务器端完成。在PHP上,我也无法得到所需的正则表达式,所以我所做的就是将密码拆分为一个字符数组,然后检查每个字符与允许的字符数组。如果任何char不在数组中,则返回false。

允许的字符是0-9,a-z,A-Z和`! '?%%& *()_ - + = {[}]:; @〜#| <,>。'/ \ “T数字如何做到这一点。

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

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

所以,有效密码可以是,例如

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

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

感谢您的帮助!

+0

你可以指定其中“某些情况下”的表达不工作? – 2012-03-27 02:28:57

+0

什么不起作用?你能给出一个有效和无效的测试样本吗? – Joseph 2012-03-27 02:28:59

+0

为什么不能应用您在PHP端使用的相同方法,并将输入的每个字符与数组匹配? – 2012-03-27 02:31:28

回答

2

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

-/[ \ ]^

需要注意的是需要转义字符,当你创建一个使用new一个正则表达式的对象是不同的。

当他们在场时,你不会逃避这些角色,甚至有些角色甚至不包括在内。此外,当您指定不允许时,您将包含\s的空格。最后,除非我快速查看你的正则表达式,否则你不包含数字。为了解决您所担心的顺序是导致您的正则表达式失败的原因,顺序在角色类中不相关。

校正的正则表达式:

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

这里是一个 “测试套件”。我不要求它是万无一失的,但它似乎很好地工作:

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

变化查字典根据需要,你要善于去考正则表达式的大量。请注意,按照当前的设置,它只能真正检查一致性 - 也就是说,它只检查正则表达式是否查找字典字符串中的所有内容。

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

正如Qtax指出,以下将是一个稍微短,完成同样的事情:

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

这工作100%的时间!谢谢拉杜! 我可能忘记再次包括数字(我一直在尝试更好地理解它的同时向正则表达式添加和删除东西)。 非常感谢您的帮助。 – Ignacio 2012-03-27 03:27:28

+0

很高兴我能帮到你。 – Radu 2012-03-27 03:32:55

+0

''''不需要转义。如果放置在合适的位置,也不要放置'^'和'-'。 – Qtax 2012-03-27 04:01:35

0

它看起来像要接受除空白的所有字符。那是对的吗?如果是这样,你可以匹配除了与JS以下正则表达式空白的一切:

/^\S+$/​ 

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

+1

'/^\ S + $ /'完成同样的事情 – Radu 2012-03-27 02:49:53

+1

另外,这可以匹配更多的Unicode字符,例如¶。 – Radu 2012-03-27 02:55:11

+0

是的,除了OP只与一小组字符明确匹配外。 +1上'/^\ S + $ /' – Kai 2012-03-27 02:58:38