允许数字、字母和空格的用户名正则表达式

2023-12-04

我正在寻找一些可用于检查有效用户名的正则表达式代码。

我希望用户名包含字母(大写和小写)、数字、空格、下划线、破折号和点,但用户名必须以字母或数字开头和结尾。

理想情况下,它也不应该允许上面列出的任何特殊字符连续重复一次以上,即它们可以有任意数量的空格/点/破折号/下划线,但必须至少有一个数字或他们之间的信。

我也有兴趣了解您是否认为这对于用户名来说是一个好的系统?我已经寻找了一些可以做到这一点的正则表达式,但它们似乎都不允许空格,并且我希望用户名中包含一些空格。

谢谢 :)


所以看起来您希望您的用户名有一个“单词”部分(字母或数字序列),并散布一些“分隔符”部分。

正则表达式看起来像这样:

^[a-z0-9]+(?:[ _.-][a-z0-9]+)*$

这是一个示意性的细分:

           _____sep-word…____
          /                  \
^[a-z0-9]+(?:[ _.-][a-z0-9]+)*$             i.e. "word ( sep word )*"
|\_______/   \____/\_______/  |
| "word"     "sep"   "word"   |
|                             |
from beginning of string...   till the end of string

所以本质上我们想要匹配类似的东西word, word-sep-word, word-sep-word-sep-word, etc.

  • 不会有连续的sep没有word之间
  • 第一个和最后一个字符将始终是 a 的一部分word(即不是sep char)

请注意,对于[ _.-], -是最后一个,因此它不是范围定义元字符。这(?:…)就是所谓的非捕获团体。我们需要括号来对重复进行分组(即(…)*),但由于我们不需要捕获,所以我们可以使用(?:…)*反而。

要允许大写/各种 Unicode 字母等,只需扩展字符类/根据需要使用更多标志。

参考

  • 正则表达式.info/锚点, 字符类, 重复, Grouping
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

允许数字、字母和空格的用户名正则表达式 的相关文章

随机推荐