对于我的注册我用我的正则表达式检查用户名 - 用户名必须包含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);
}
}
答案 0 :(得分:3)
我知道您不希望用户名以-
结尾。这就是这个
^[\w.-]{2,19}[\w.]$
由于\w
包含下划线,这将允许用户名以下划线结尾,但不能使用短划线,因为短划线不是定义最后一个字符的字符类的一部分。
由于zerkms评论s
修饰符在这里没有意义,因为它改变了你不使用的.
特殊字符的行为。
i
修饰符也没有意义,它会匹配小写和大写字母,但你不使用字母来定义你的表达。
<强>更新强>
然后你需要一个negative lookahead
^(?!.*p-)[\w.-]{3,20}$
(?!.*p-)
是一个负向前瞻,只要字符串中有p-
,这个断言就会失败。