用于验证用户名的正则表达式?

时间:2010-09-29 12:37:20

标签: php regex

我仍然有点使用正则表达式,所以这是我的困境。我对可接受的用户名有一些规则,我正在尝试为它们制作表达式。

他们是:

  • 1-15个字符
  • a-z,A-Z,0-9,并且空格可以接受
  • 必须以a-z或A-Z
  • 开头
  • 不能以空格结束
  • 连续不能包含两个空格

就我所知,这已经到了。

/^[a-zA-Z]{1}([a-zA-Z0-9]|\s(?!\s)){0,14}[^\s]$/

它在大多数情况下都有效,但与“a”等单个字符不匹配。

任何人都可以帮助我吗?我在PHP中使用PCRE,如果这有任何区别。

3 个答案:

答案 0 :(得分:7)

试试这个:

/^(?=.{1,15}$)[a-zA-Z][a-zA-Z0-9]*(?: [a-zA-Z0-9]+)*$/

前瞻断言(?=.{1,15}$)检查长度,其余检查结构:

  • [a-zA-Z] 确保第一个字符是字母字符;
  • [a-zA-Z0-9]* 允许使用以下任意数量的字母数字字符;
  • (?: [a-zA-Z0-9]+)* 允许单个空格(不是\s允许任何空白字符)的任意数量的序列必须至少跟一个字母数字字符(请参阅{ {3}})。

您还可以删除前瞻声明并使用PCRE subpatterns for the syntax of (?:…)检查长度。

答案 1 :(得分:0)

你的正则表达式的主要问题是它需要至少两个字符两个匹配:

  • 一个[a-zA-Z]{1}部分
  • 一个[^\s]部分

除了这个问题,我看到你的正则表达式的某些部分可以改进:

  • [^\s]类将匹配任何字符,空格除外:将接受点或分号,请尝试使用[a-zA-Z0-9]类来确保字符是正确的。
  • 您可以在开头删除{1}部分,因为正则表达式默认匹配完全一个字符

答案 2 :(得分:0)

在第一个字符可选后

完成所有内容
^[a-zA-Z]?([a-zA-Z0-9]|\s(?!\s)){0,14}[^\s]$