通过正则表达式检查用户名


check username by regexp

对于我的注册,我用我的正则表达式检查用户名 - 用户名必须包含超过 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);
        }
    }
我知道

您不希望用户名以-结尾。这将是这个

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

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

在正则表达式上看到它

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

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

更新

然后你需要一个消极的展望

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

(?!.*p-)是一个负面的展望,一旦字符串中的任何位置有p-,此断言就会失败。

在正则表达式上看到它