通过regexp检查用户名

时间:2012-07-02 09:37:44

标签: php regex

对于我的注册我用我的正则表达式检查用户名 - 用户名必须包含3个以上且少于20个字符。用户名也只能包含字母数字字符和“_”,“。”,“ - ”。

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

现在我想检查(p-),如果存在,则返回false username cant content(p - )

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

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

1 个答案:

答案 0 :(得分:3)

我知道您不希望用户名以-结尾。这就是这个

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

由于\w包含下划线,这将允许用户名以下划线结尾,但不能使用短划线,因为短划线不是定义最后一个字符的字符类的一部分。

here on Regexr

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

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

<强>更新

然后你需要一个negative lookahead

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

(?!.*p-)是一个负向前瞻,只要字符串中有p-,这个断言就会失败。

here on Regexr