2010-04-30 75 views
1

所以我正在設計一個註冊頁面並檢查用戶名是字母數字。字母數字和更多

  else if(!eregi("^([0-9a-z])+$", $subuser)){ 
     $form->setError($field, "* Username not alphanumeric"); 

我用它來做到這一點。有什麼辦法可以包含下劃線(_),短劃線( - )和空格? 感謝

回答

2

您可以使用:

else if(!eregi("^([0-9a-z_ -])+$", $subuser)){ 

你只需要一個underscore(_),一個hyphen (-)space()添加到焦炭類。這三個連字符中只有特殊含義的字符類,但只有,如果它的兩側由char包圍。所以爲了避免這種情況,你可以在開始或結束時加入它。你也可以將它包含在中間並轉義它。

所以下面也有效:

else if(!eregi("^([-0-9a-z_ ])+$", $subuser)){ 
else if(!eregi("^([0-9a-z_\- ])+$", $subuser)){ 
+1

太差eregi在PHP中被棄用。 – 2010-04-30 15:41:42

0

您可以使用這樣

if(!eregi("^([0-9a-z-_ ])+$", $subuser)) 

u能在這個支架添加儘可能多的特殊字符[0-9A-Z-_]但要確保有些需要通過(斜槓)轉義

2

使用preg_match語法學習更好,因爲這是一個標準的正則表達式檢查。

與它應該是這樣的:

$bValid = preg_match("/^[\w\d-_]*$/", $sUsername); 

的羽毛閱讀正則表達式檢查讀http://www.php.net/manual/en/intro.pcre.php

和的preg_match和額日格之間的短比較看http://answers.yahoo.com/question/index?qid=20080327071915AAO0O2w

+1

upvoted作爲唯一的非棄用preg答案。雖然我會明確說明,而不是類,因爲\ w可以根據區域設置而有所不同。 – 2010-04-30 15:45:22

+0

OMG刪除最後一個。這雅虎的答案是可怕的。 ereg被棄用,就是這樣。其餘的都是垃圾。什麼是「二進制安全」?而對於網頁大小的數據片段,速度差異是微不足道的 – 2010-04-30 15:54:57

+0

@shrapnel我同意。更新。 – Alexar 2010-04-30 16:53:35