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

标签 regex usability

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

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

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

我也很想知道您是否认为这是一个很好的用户名系统?我已经寻找了一些可以做到这一点的正则表达式,但它们似乎都不允许空格,我希望用户名中有一些空格。

谢谢 :)

最佳答案

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

正则表达式将如下所示:

^[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

所以本质上我们想要匹配 wordword-sep-wordword-sep-word-sep-word 等。
  • 之间没有 sep 的情况下不会有连续的 word
  • 第一个和最后一个字符将始终是 word 的一部分(即不是 sep 字符)

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

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

    引用
  • regular-expressions.info/Anchors Character Class Repetition Grouping
  • 关于用户名的正则表达式,允许数字、字母和空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3378008/

    相关文章:

    JavaScript 正则表达式替换 : invalid quantifier

    javascript - 将数组转换为字符串时允许逗号跟随

    php - 替换 URL 中的参数值

    python - 使用ansible从字符串中提取数字

    usability - 友好的HTTP 401状态代码消息?

    user-interface - POS UI设计与开发 : what should be included & avoided?

    c# - 长时间运行的应用程序,如何处理错误?

    c# - 在 Visual Studio 2010 中自动格式化 lambda 函数

    c# - 通过 URL 自动登录用户

    javascript - 用于检查 9 个字母单词中前两个字符必须为 "1 (numaric)-"的正则表达式,其余应为字母数字