我有一个用户可以选择用户名的网站。目前,他们几乎可以输入任何字符,包括@! #etc。
我知道我可以使用正则表达式,这可能就是我选择的。
我将使用一个否定的集合,我假设这是正确的工具:
[^@!#]
那么,我如何才能知道所有非法字符?我可以开始手动输入那些显而易见的内容,例如!@#$%^& *(),但有没有一种简单的方法可以做到这一点,而无需手动将它们中的每一个都放入?
我知道很多网站只允许包含字母,数字,破折号或下划线的字符串。这样的事情对我来说很有用。
非常感谢任何帮助。
谢谢S.O。!
答案 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œ,æ等字符可能会让你头疼。如果您将用户名限制为您提供的一部分字母,您可以轻松地删除其中您可能不需要的所有其他内容。