0

对于我的注册,我使用我的正则表达式检查用户名——用户名必须包含超过 3 个且少于 20 个字符。此外,用户名只能包含字母数字字符和“_”、“.”、“-”。

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

现在我也想检查(p-),如果存在返回错误的用户名不能内容(p-)

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

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

1 回答 1

3

我了解到您不希望用户名以-. 这将是这个

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

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

在 Regexr 上查看

正如 zerkms 评论的那样,s修饰符在这里没有意义,因为它会改变.您不使用的特殊字符的行为。

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

更新

然后你需要一个负前瞻

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

(?!.*p-)是一个否定的前瞻,只要p-字符串中有任何地方,这个断言就会失败。

在 Regexr 上查看

于 2012-07-02T09:55:26.907 回答