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-_' –