正则表达式:允许字母、数字和空格(至少包含一个字母或数字)

新手上路,请多包涵

我目前正在使用这个正则表达式 ^[A-Z0-9 _]*$ 来接受字母、数字、空格和下划线。我需要修改它以在字符串中的某处至少需要一个数字或字母。任何帮助,将不胜感激!

这将用于验证我的网站的用户名。我实际上想支持尽可能多的字符,但只是想确保我防止代码注入,并且字符对所有用户都能正常显示。所以我绝对愿意接受支持更广泛字符集的正则表达式验证建议。

原文由 makeee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3k
2 个回答

您只需要指定您当前的 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 _]*$

原文由 paxdiablo 发布,翻译遵循 CC BY-SA 2.5 许可协议

继续并指出这一点,而不是重复使用这些:

 [A-Za-z0-9 _]
[A-Za-z0-9]

我有两个(希望更好)替代这两个:

 [\w ]
[^\W_]

第一个匹配任何单词字符(字母数字和 _ ,以及 Unicode)和空格。第二个匹配任何 单词字符或下划线(仅限字母数字,以及 Unicode)。

如果您不想进行 Unicode 匹配,请坚持使用其他答案。但这些在眼睛上看起来更容易(在我看来)。在撰写本文时采用“首选”答案并使用较短的正则表达式可以得到:

 ^[\w ]*[^\W_][\w ]*$

也许更具可读性,也许更少。当然更短。你的选择。

编辑:

请注意,我在这里假设使用 Perl 风格的正则表达式。您的正则表达式引擎可能支持也可能不支持像 \w 和 \W 这样的东西。

编辑 2:

用有人链接的 JS 正则表达式测试器测试了我的,一些基本示例工作正常。没有做任何广泛的事情,只是想确保 \w 和 \W 在 JS 中工作正常。

编辑 3:

在尝试使用 JS regex 测试器站点测试一些 Unicode 后,我发现了问题:该页面使用 ISO 而不是 Unicode。难怪我的日语输入不匹配。哦,那应该不难解决:

 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

或者。就 JavaScript 而言,我不知道应该做什么,但我相信这并不难。

原文由 Chris Lutz 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题