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

Я пробовал:

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

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

Ответ 1

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 включает в себя больше, чем буквенно-числовое (оно включает подчеркивание), но включает все \d.

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

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

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

/^[^\W_]+$/

Ответ 2

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

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

Ответ 3

  • Отсутствует конечный якорь $
  • Отсутствует множитель
  • Отсутствует конечный разделитель

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

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

Ответ 4

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

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

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

Ответ 5

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