我目前正在使用这个正则表达式^[A-Z0-9 _]*$
来接受字母,数字,空格和下划线.我需要修改它以在字符串中的某处需要至少一个数字或字母.任何帮助,将不胜感激!
这将用于验证我的网站的用户名.我实际上想支持尽可能多的字符,但只是想确保我阻止代码注入,并且字符对所有用户都显示正常.因此,我肯定对正则表达式验证建议持开放态度,这些建议可以支持更广泛的字符集.
您只需指定当前的RE,然后再输入一个字母/数字,然后再指定当前的RE:
^[A-Z0-9 _]*[A-Z0-9][A-Z0-9 _]*$
既然你现在已经声明它们是Javascript RE,那么这里有一个有用的站点,你可以根据输入数据测试RE.
如果你想要小写字母:
^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$
要继续并在那里得到一个观点,而不是重复使用这些:
[A-Za-z0-9 _] [A-Za-z0-9]
我有两个(希望更好)替换这两个:
[\w ] [^\W_]
第一个匹配任何单词字符(字母数字和_
,以及Unicode)和空格.第二匹配任何不是一个非文字字符或一个下划线(字母数字只,以及为Unicode).
如果您不想要Unicode匹配,那么请坚持使用其他答案.但这些看起来更容易(在我看来).在撰写本文时使用"首选"答案并使用较短的正则表达式给出了我们:
^[\w ]*[^\W_][\w ]*$
也许更具可读性,也许更少.当然更短.你的选择.
编辑:
就像一个注释,我在这里假设Perl风格的正则表达式.你的正则表达式引擎可能支持也可能不支持\ w和\ W之类的东西.
编辑2:
使用JS regex测试程序测试了我的链接和一些基本示例正常工作.没有做任何广泛的事情,只是想确保\ w和\ W在JS中运行良好.
编辑3:
尝试使用JS regex测试站点测试一些Unicode后,我发现了问题:该页面使用的是ISO而不是Unicode.难怪我的日语输入不匹配.哦,这应该不难解决:
或者.我不知道在JavaScript方面应该做些什么,但我确信这并不难.
^[ _]*[A-Z0-9][A-Z0-9 _]*$
您可以选择在前面添加一些空格或下划线,然后您需要一个字母或数字,然后需要任意数量的数字,字母,空格或下划线.
只包含空格和下划线的东西将使该[A-Z0-9]
部分失败.
您可以使用环视:
^(?=.*[A-Za-z0-9])[A-Za-z0-9 _]*$
它会提前检查字符串是否有字母或数字,如果有,它将检查其余的字符是否符合您的要求.这可能会有所改进,但它似乎适用于我的测试.
更新:
添加Chris Lutz建议的修改:
^(?=.*[^\W_])[\w ]*$/