我正在寻找一些可用于检查有效用户名的正则表达式代码。
我希望用户名包含字母(大写和小写)、数字、空格、下划线、破折号和点,但用户名必须以字母或数字开头和结尾。
理想情况下,它也不应该允许上面列出的任何特殊字符连续重复多次,即它们可以有任意数量的空格/点/破折号/下划线,但必须至少有一个数字或他们之间的信。
我也很想知道您是否认为这是一个很好的用户名系统?我已经寻找了一些可以做到这一点的正则表达式,但它们似乎都不允许空格,我希望用户名中有一些空格。
谢谢 :)
最佳答案
所以看起来你希望你的用户名有一个“单词”部分(字母或数字的序列),穿插一些“分隔符”部分。
正则表达式将如下所示:
^[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
等。sep
的情况下不会有连续的 word
word
的一部分(即不是 sep
字符) 请注意,对于
[ _.-]
, -
是最后一个,因此它不是范围定义元字符。 (?:…)
是所谓的非捕获组。我们需要括号来分组重复(即 (…)*
),但由于我们不需要捕获,我们可以使用 (?:…)*
代替。要允许大写/各种 Unicode 字母等,只需根据需要扩展字符类/使用更多标志。
引用
关于用户名的正则表达式,允许数字、字母和空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3378008/