你在一個正則表達式,詢問了很多,這是可能的,但它是不是最好的方式,你希望讓用戶知道爲什麼他們的用戶名是錯誤。
function checkUsername($username) {
$username = trim($username);
if (empty($username)) {
return "username was left blank.";
}elseif (strlen($username) < 4) {
return "username was too short";
}elseif (strlen($username) > 26) {
return "username was too long";
}elseif (!preg_match('~^[a-z]{2}~i', $username)) {
return "username must start with two letters";
}elseif (preg_match('~[^a-z0-9_.]+~i', $username)) {
return "username contains invalid characters.";
}elseif (substr_count($username, ".") > 1) {
return "username may only contain one or less periods.";
}elseif (substr_count($username, "_") > 1) {
return "username may only contain one or less underscores.";
}
return true;
}
那就要檢查一下你會怎麼做:
$validUsername = checkUsername($username);
if ($validusername !== true) {
echo "An error occured: " . $validUsername;
}
這樣,用戶就知道有一個錯誤並解決它更容易,而不是被盲目的錯誤是什麼。你也應該停止使用ereg它已經摺舊使用preg_match來代替。
注意使用!==來檢查,這也檢查類型,因爲它可以返回一個字符串(這將返回一個真正的鬆散比較)。僅供參考。
'preg_match'是執行正則表達式匹配的首選方式。 'eregi'從PHP 5.3起就被棄用了,它的使用是「非常不鼓勵」的:http://php.net/eregi – rojoca 2010-09-19 20:51:45
沒有,謝謝鏈接 – Elliott 2010-09-19 20:54:31
請給出一些有效和無效用戶名的例子。你的規則是矛盾的(至少有兩個字母與唯一的數字)。 – kennytm 2010-09-19 21:54:41