Использование регулярных выражений

Что не так с этим регулярным выражением? Мне нужно, чтобы $ name было только буквенным номером. Теперь он вообще не работает.

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

Вам нужен квантификатор, иначе он позволит только одному персонажу. Например, чтобы потребовать, чтобы один или несколько символов использовали + :

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

Ваше регулярное выражение описывает только один символ. Используйте либо квантификатор, как + чтобы повторять один раз [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)) 

Не забудьте взглянуть на другие функции, которые будут делать то, что вы хотите, без накладных расходов на регулярные выражения. В этом случае вы можете использовать ctype_alnum .

Когда вы точно не знаете, что делает ваше выражение, иногда это помогает протестировать его с помощью инструмента. Вы можете попробовать, может быть, Regex Coach: http://www.weitz.de/regex-coach/ 🙂