对于我的注册,我用我的regex检查username -- Username必须包含超过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);
}
}发布于 2012-07-02 17:55:27
我知道您不希望用户名以-结尾。这是这样的
^[\w.-]{2,19}[\w.]$由于\w包含下划线,这将允许用户名以下划线结尾,而不是以破折号结尾,因为破折号不属于定义最后一个字符的字符类。
查看here on Regexr
正如zerkms注释的那样,s修饰符在这里没有任何意义,因为它改变了您不使用的.特殊字符的行为。
此外,i修饰符没有任何意义,它将匹配大小写字母,但您不使用字母来定义您的表达式。
更新
然后你需要一个negative lookahead
^(?!.*p-)[\w.-]{3,20}$(?!.*p-)是一个负前视,只要字符串中有p-,这个断言就会失败。
查看here on Regexr
https://stackoverflow.com/questions/11291125
复制相似问题