2010-05-30 115 views
4

這個正則表達式有什麼問題?我需要它使$ name成爲字母數字。現在它似乎根本不起作用。使用正則表達式

if (!preg_match("/^[A-Za-z0-9]$/",$name)) { 
    $e[]="name must contain only letters or numbers"; 
} 

回答

9

你需要一個量詞,否則它只會允許一個字符。例如,要求必須有一個或多個字符使用+

/^[A-Za-z0-9]+$/ 
2

你的正則表達式也僅描述一個單個字符。要麼使用一個quantifier+以允許[A-Za-z0-9]被重複一次或多次:

if (!preg_match("/^[A-Za-z0-9]+$/",$name)) 

或者你可以反你的表達和尋找不屬於字母數字字符([^A-Za-z0-9][A-Za-z0-9]補):

if (preg_match("/[^A-Za-z0-9]/",$name)) 
2

不要忘記看看其他功能,它會做你想要的東西,而不用正則表達式的開銷。在這種情況下,您可以使用ctype_alnum

1

當你不完全知道你的表達是幹什麼的時候,有時候用工具測試它會有幫助。你可以嘗試也許正則表達式教練:http://www.weitz.de/regex-coach/ :)