2013-08-21 133 views
1

我有一個reg exp,它應該檢查名稱中是否有任何非法字符。允許的字符是0-9,a-z,A-Z,middlescore( - )和下劃線(_)。PHP中的正則表達式preg_match

這是函數

function validate_playername($playername){ 
    if (preg_match('/^[0-9A-Z-_]$/i',$playername)) { 
     return true; 
    } else{ 
     return false; 
    } 

} 

函數被調用這樣

if (validate_playername($addplayer)) { 
    echo "valid player Name"; 
} else { 
    echo "Invalid Player Name"; 
} 

然而,當我輸入正確的名稱,如velocity28返回爲無效的球員的名字。我的註冊表錯誤了嗎?

+0

嘗試用斜槓轉義上一個連字符。 – Blazemonger

回答

5

/^[0-9A-Z-_]$/i只匹配一個字符。

追加+匹配多個字符:

'/^[-0-9A-Z_]+$/i' 
  • 移動-開頭。

UPDATE

作爲Enissay評論的,正則表達式可以使用\w被簡化:

'/^[-\w]+$/' 
+0

你也可以添加'{2,6}'而不是'+'來要求一個帶有最少2個字符和最多6個字符的名字,例如 – tobspr

+0

這個工作!謝謝:) –

+1

@RonaldFernandes,你可能需要添加'az',如果你希望它匹配小寫字母,也可以按照你的要求'允許的字符是0-9,az,AZ,middlescore( - )和下劃線(_ )'...因爲'\ w'匹配任何單詞字符(字母,數字,下劃線),所以可以將falsetru的表達式簡化爲'/^[ - \ w] + $/i' – Enissay

0

要在字符類中使用一個文字減號,它必須以一個轉義反斜槓:

function validate_playername($playername){ 
    if (preg_match('/^[0-9A-Z\-_]$/i',$playername)) { 
     return true; 
    } else{ 
     return false; 
    } 

    } 

請參閱http://php.net/manual/de/regexp.reference.character-classes.php瞭解更多信息。

您還可以將減號移動到不能成爲字符範圍定義的一部分的位置,例如,使其成爲角色類中的第一個角色。