PHP - регулярное выражение, разрешающее только буквы и цифры - PullRequest
42 голосов
/ 03 декабря 2010

Я пытался:

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

но я делаю что-то не так, я думаю.

Ответы [ 5 ]

93 голосов
/ 03 декабря 2010

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_]+$/
19 голосов
/ 03 декабря 2010

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

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

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

/^[a-z0-9]+$/i
2 голосов
/ 15 февраля 2014

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

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

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

0 голосов
/ 03 декабря 2010

попробуйте так .eregi ("[^ A-Za-z0-9.]", $ Value)

...