使用正则表达式验证字符串是否为URL安全

时间:2014-06-25 21:40:03

标签: javascript regex encoding

我有一个用户可以选择用户名的网站。目前,他们几乎可以输入任何字符,包括@! #etc。

我知道我可以使用正则表达式,这可能就是我选择的。

我将使用一个否定的集合,我假设这是正确的工具:

[^@!#]

那么,我如何才能知道所有非法字符?我可以开始手动输入那些显而易见的内容,例如!@#$%^& *(),但有没有一种简单的方法可以做到这一点,而无需手动将它们中的每一个都放入?

我知道很多网站只允许包含字母,数字,破折号或下划线的字符串。这样的事情对我来说很有用。

非常感谢任何帮助。

谢谢S.O。!

3 个答案:

答案 0 :(得分:17)

不要使用否定,只在字符类中放置您想要允许的内容。

^[a-zA-Z0-9_-]*$

<强>解释

^                 # the beginning of the string
 [a-zA-Z0-9_-]*   #  any character of: 'a' to 'z', 'A' to 'Z', 
                  #  '0' to '9', '_', '-' (0 or more times)
$                 # before an optional \n, and the end of the string

答案 1 :(得分:2)

不是否定价值,也许只允许一些

更好

[:word:] - 数字,字母和下划线

检查此图表

http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

答案 2 :(得分:1)

您希望使用包含集的原因之一是,对于所有Unicode变体,限制坏字符非常困难。诸如ß,ñ,oœ,æ等字符可能会让你头疼。如果您将用户名限制为您提供的一部分字母,您可以轻松地删除其中您可能不需要的所有其他内容。