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

Dan*_*iel 3 regex usability username

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

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

理想情况下,它也不应允许上面列出的任何特殊字符连续重复多次,即它们可以根据需要具有尽可能多的空格/点/短划线/下划线,但必须至少有一个数字或他们之间的信.

我也有兴趣知道你认为这是一个很好的用户名系统吗?我已经看过一些可以做到这一点的正则表达式,但它们似乎都没有允许空格,我希望用户名中有一些空格.

谢谢 :)

pol*_*nts 7

所以看起来你希望你的用户名有一个"单词"部分(字母或数字的序列),穿插一些"分隔符"部分.

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

^[a-z0-9]+(?:[ _.-][a-z0-9]+)*$
Run Code Online (Sandbox Code Playgroud)

这是一个原理图分类:

           _____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
Run Code Online (Sandbox Code Playgroud)

所以基本上我们要匹配之类的东西word,word-sep-word,word-sep-word-sep-word,等.

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

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

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

参考