2011-07-13 50 views
1

我一直在閱讀和閱讀正則表達式,但我想不出有什麼錯我的代碼:Eregi驗證問題

if(eregi("^[A-Za-z0-9_\-]$", $username)){return true;} 

它永遠不會返回true。我試圖驗證用戶名,只允許小寫a-z,大寫a-z,數字,連字符和下劃線。

回答

5

eregi()已棄用。改爲使用preg_match()

您沒有regex delimiters(例如/,@,~等)。使用preg_match('/^[\w-]+\z/')

  • /是我用過的分隔符。 PHP允許你使用many other characters
  • \w[A-Za-z0-9_]的快捷方式。在這裏有用的是使正則表達式更短,希望更清晰。
  • 在字符類的內部,如果-不是有效範圍的一部分,則按照字面意思。我沒有逃脫它,因爲它不需要在這種情況下逃脫。
  • +是一個量詞,表示匹配1次或多次。你需要在這裏。
  • \z表示匹配字符串的結尾。您使用$,這將允許尾隨\n
+0

哇!謝謝! – Jack

1

不要使用eregi - 它已過時,使用preg_match代替:

if (preg_match("/^[A-Za-z0-9_\-]+/i$", $username)){return true;} 
+0

爲什麼'我'模式修飾符和顯式'A-Za-z'? – alex

+0

@alex'我'是一個案件_insensitive_搜索,其中'eregi'確實,應該包括在內。 – mc10

+0

@ mc10:但答案已經涵蓋了角色類中的「A-Za-z」。 – alex