8
预先感谢您为您的时间在这个问题上帮助..的preg_match():编译失败:无效的范围在字符类偏移量20
的preg_match():编译失败:无效的范围在字符类在偏移线278
我不知道为什么,这停止工作突然工作的几个月后,会不会是在代码升级20 session.php文件..
这里是代码
else{
/* Spruce up username, check length */
$subuser = stripslashes($subuser);
if(strlen($subuser) < $config['min_user_chars']){
$form->setError($field, "* Username below ".$config['min_user_chars']."characters");
}
else if(strlen($subuser) > $config['max_user_chars']){
$form->setError($field, "* Username above ".$config['max_user_chars']."characters");
}
/* Check if username is not alphanumeric */
/* PREG_MATCH CODE */
else if(!preg_match("/^[a-z0-9]([0-9a-z_-\s])+$/i", $subuser)){
$form->setError($field, "* Username not alphanumeric");
}
/* PREG_MATCH CODE */
/* Check if username is reserved */
else if(strcasecmp($subuser, GUEST_NAME) == 0){
$form->setError($field, "* Username reserved word");
}
/* Check if username is already in use */
else if($database->usernameTaken($subuser)){
$form->setError($field, "* Username already in use");
}
/* Check if username is banned */
else if($database->usernameBanned($subuser)){
$form->setError($field, "* Username banned");
}
}
...或PHP本身已升级。根据RegexBuddy的说法,PHP 5.5要求连字符被转义或移动到列表的末尾,如果你想要它匹配一个文字连字符。在此之前,显然,它只是假定你的意思是因为'_- \ s'作为一个范围没有意义。 –
是的,PHP捆绑了PCRE的一个版本,所以最终会出现同样的问题。接得好。 – MatsLindh
@AlanMoore:太少知道的可能性是在简写字符类后立即加上连字符:'\ s-_' –