PHP – регулярное выражение позволяет только буквы и цифры

Я пытался:

preg_match("/^[a-zA-Z0-9]", $value) 

но я делаю что-то неправильно, я думаю.

1. Использовать встроенный PHP ctype_alnum

Для этого вам не нужно использовать регулярное выражение, PHP имеет встроенную функцию ctype_alnum которая будет делать это за вас и выполнять быстрее:

 <?php $strings = array('AbCd1zyZ9', 'foo!#$bar'); foreach ($strings as $testcase) { if (ctype_alnum($testcase)) { echo "The string $testcase consists of all letters or digits.\n"; } else { echo "The string $testcase does not consist of all letters or digits.\n"; } } ?> 

2. В качестве альтернативы используйте регулярное выражение

Если вы отчаянно хотите использовать регулярное выражение, у вас есть несколько вариантов.

В первую очередь:

 preg_match('/^[\w]+$/', $string); 

\w включает \w себя больше, чем буквенно-числовое (оно включает символ подчеркивания), но включает все \d .

В качестве альтернативы:

 /^[a-zA-Z\d]+$/ 

Или даже просто:

 /^[^\W_]+$/ 

Вы остановились на / (разделитель рисунков) и $ (совпадающая конечная строка).

 preg_match("/^[a-zA-Z0-9]+$/", $value) 
  • Отсутствует конечный якорь $
  • Отсутствующий множитель
  • Отсутствует конечный разделитель

В любом случае, это должно потерпеть неудачу, но если это может сработать, оно совпадает с одной цифрой в начале строки.

 /^[a-z0-9]+$/i 

Поскольку ОП сказал, что он хочет только буквы и цифры (без подчеркивания!), Еще один способ иметь это в регулярном выражении php – использовать выражения posix:

 /^[[:alnum:]]+$/ 

Примечание. Это не будет работать в Java, JavaScript, Python, Ruby, .NET.

попробуйте этот путь .eregi ("[^ A-Za-z0-9.]", значение $)