2012-07-02 39 views
0

为我的注册我检查用户名与我的正则表达式 - 用户名必须包含超过3但少于20个字符。此外,用户名只能包含字母数字字符和“_”,“。”,“ - ”。通过regexp检查用户名

/^([\w\.\-]{3,20})$/isu. 

现在我要检查(对)也是如此,如果这个存在返回false用户名着的内容(对)

private $regExpUsername = "/^([\w\.\-]{3,20})$/isu"; 

    private function checkUsername($username){ 
     if(!preg_match($this->regExpUsername, $username)){ 
      $this->addError(ERR_ENTER_USERNAME); 
     } 
    } 
+1

's'修饰符在这里没有意义。并且“如果这存在返回false用户名不能内容(p-)”解释不够清楚 – zerkms

回答

3

我明白,你不想要的用户名来结束一个-。这将是这

^[\w.-]{2,19}[\w.]$ 

由于\w包含下划线,这将允许用户名使用下划线结束,而不是用破折号,因为破折号是不字符类,它定义了最后一个字符的一部分。

看到它here on Regexr

由于zerkms评论的s改性剂是没有意义在这里,因为它改变了你不使用.特殊字符的行为。

此外i修饰符没有意义,它会匹配大写字母和小写字母,但不使用字母来定义表达式。

更新

然后,你需要一个negative lookahead

^(?!.*p-)[\w.-]{3,20}$ 

(?!.*p-)是一种消极的前瞻,是有p-的字符串中的任何这种说法就会失败。

查看一下here on Regexr

+0

不,我希望用户名ton包含“p-”例如davp-id –

+0

@AramGevorgyan更新了我的解决方案 – stema