我仍然有点使用正则表达式,所以这是我的困境。我对可接受的用户名有一些规则,我正在尝试为它们制作表达式。
他们是:
就我所知,这已经到了。
/^[a-zA-Z]{1}([a-zA-Z0-9]|\s(?!\s)){0,14}[^\s]$/
它在大多数情况下都有效,但与“a”等单个字符不匹配。
任何人都可以帮助我吗?我在PHP中使用PCRE,如果这有任何区别。
答案 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]$