2008-10-27 31 views
1
if(!eregi("^([0-9a-z_\[\]\*\- ])+$", $subuser)) 
    $form->setError($field, "* Username not alphanumeric"); 

有人可以告訴我爲什麼它不允許字符,如-*不能在正則表達式中使用某些字符

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

這是原始的一段代碼。一個朋友把它改成了最上面的那個,它會允許a-z和0-9,但是它不允許我需要的其他角色。誰能幫我?

在此先感謝。

回答

4

對於括號表達式,

要在列表中包括文字「]」,將其作爲第字符(以下可能的「^」)。要包含一個文字' - ',使其成爲範圍的第一個或最後一個字符或第二個端點。要使用文字' - '作爲範圍的第一個端點,請將其放在'[。'和'。]'中,使其成爲整理元素(見下文)。除了這些以及使用'['(見下一段)「的一些組合之外,所有其他特殊字符(包括'\')在括號表達式中失去其特殊含義。

所以這應該做你想要什麼:

「^([] 0-9A-Z _ [* - ])+ $」

7

你的正則表達式使用PCRE語法,所以你必須使用preg_match()而不是eregi()。

嘗試此代碼,而不是:

else if (!preg_match("/^([0-9a-z_\[\]* -])+$/i", $subuser)) { 
$form->setError($field, "* Username not alphanumeric"); 
} 
1

即使使用參看preg_ *函數的模式需要被包裹在nonalphanum分隔符:

「〜^([0-9A-Z _ [] * - ] )+ $〜「

3

不要使用ereg系列函數 - 它們更慢,如果我沒記錯的話,最終會被棄用。

這應該修復它

if (preg_match("/^[^0-9a-z_\[\]* -]$/i", $subuser) 
{ 
    $form->setError($field, "* Username not alphanumeric"); 
} 
+0

是的 - 他們將要在PHP6完全刪除。最好避免它們。 – nickf 2008-10-27 23:43:28

相關問題