Что не так с этим регулярным выражением? Мне нужно, чтобы $ 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/ 🙂