用户名的正则表达式

6

我正试图弄清楚如何设置一个正则表达式来满足以下要求:

  • 必须至少包含两个字母字符a-zA-Z
  • 第一步检查后仅允许一个下划线或破折号,破折号/下划线不能在末尾,适用于第一步相同的规则
  • 必须是字母数字字符。

基本上,一个很好的例子是

可接受的用户名

  • myusername_09
  • username-09
  • bw-09

不可接受的用户名

  • bw 09
  • bw--09
  • bw_-09
  • username__09

如果有任何帮助将不胜感激,这就是我所拥有的,但它对我来说并不起作用。

^(?=[A-Za-z0-9])(?!.*[_-]{2})[A-Za-z0-9_-]+$

1
FYI: "regex" 是 "regular expression" 的缩写,所以对我来说,“regex expression” 听起来有点滑稽。 - Sean Reifschneider
谢谢Campbell修复我的标签。我还是个新手,刚加入Stack Overflow社区。大多数时候都是来寻找已经被问过的问题的答案。但这次我在那里找不到我想要的答案。 - Benjamin
@Sean:我用C#编程,我只是习惯于使用“Regex”哈哈,但是是的,我知道这个。不过还是谢谢你,以防万一我不知道。 - Benjamin
2个回答

10

如果我正确理解您的需求,您只需要验证用户名是否正确?如果是这样,我会使用以下正则表达式:

^[A-Za-z]{2,}[_-]?[A-Za-z0-9]{2,}$

您没有说明在破折号或下划线后需要多少个字符;我的示例至少需要再添加两个字符。可以根据需要进行更改。
编辑:我在[_-]之后添加了?,以考虑到下面您的评论中的可选项。
有关量词的一些附加信息:
  • {N,}表示必须至少从前一个项目匹配N个字符。
  • {N}表示必须有前面的正好N个。
  • {N,M}表示必须至少为N,但不超过M。
  • ?表示前面必须有0或1个。
  • +表示必须有1个或更多个。
  • *表示必须有0个或多个。

谢谢,这确实带来了一些答案。我很抱歉没有说明有多少个字符。事实上,我正在使用ASP.NET MVC,因此我有一个属性来定义最小和最大字符数作为验证。我忘记提到的一件事是下划线/破折号不是必需的,它可以接受典型的用户名,如bw09或username09,甚至是计划的用户名,例如“myusername”。 - Benjamin
注意;我已经编辑了答案,使下划线或破折号是可选的。请注意,这个正则表达式需要至少一个4个字符的用户名,不包括破折号/下划线,前两个字符也不能是数字。它还没有检查最大总长度。问号的添加应该可以很好地处理你所需的内容。 - Andrew Barber
^[A-Za-z]{4,}[-_]?[A-Za-z0-9]+$ 是我为那些想知道的人所得出的结果。非常感谢你的帮助,Andrew。 - Benjamin
看起来不错,除了需要用户名以4个字母字符开头,而不是你的要求中的两个;因此,bw09bw-09将不再是有效的用户名。 - Andrew Barber
是的,我改变了关于起始要求的想法:)。 我觉得4个字母字符是一个很好的陈述。 我也使用Regex Buddy,只是我不像以前那样精通正则表达式了。 - Benjamin
啊,好的;我觉得那太显然了,肯定不是一个错误(除了笔误)。很高兴能帮忙! - Andrew Barber

0
/^[A-Za-z][A-Za-z0-9_]{4,31}$/g

一个有效用户名的定义在问题中非常具体。这个答案仅适用于更通用的用户名定义: 1)必须以一个字母字符开头(而不是最少4个)。 2)后续字符是字母数字加下划线(但不是连字符,多个下划线可以代替一个)。 3)用户名长度为4到31个字符(_可以是最后一个字符)。应该解释前导/和尾随/g语法元素。它们是编程环境的一部分,不完全属于regexp本身。 - Jürgen Weigert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接