我正在寻找一些可用于检查有效用户名的正则表达式代码。
我希望用户名包含字母(大写和小写)、数字、空格、下划线、破折号和点,但用户名必须以字母或数字开头和结尾。
理想情况下,它也不应该允许上面列出的任何特殊字符连续重复一次以上,即它们可以有任意数量的空格/点/破折号/下划线,但必须至少有一个数字或他们之间的信。
我也有兴趣了解您是否认为这对于用户名来说是一个好的系统?我已经寻找了一些可以做到这一点的正则表达式,但它们似乎都不允许空格,并且我希望用户名中包含一些空格。
谢谢 :)
所以看起来您希望您的用户名有一个“单词”部分(字母或数字序列),并散布一些“分隔符”部分。
正则表达式看起来像这样:
^[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(使用前将#替换为@)