Регулярное выражение для буквенно-цифровых - PullRequest
2 голосов
/ 01 марта 2010

У меня есть регулярное выражение PHP:

$username = preg_replace('/[^a-z0-9]/i', '', $username);

Допускается только A-Z и 0-9. Как я могу разрешить ., - и _?

Ответы [ 7 ]

9 голосов
/ 01 марта 2010

Вы можете использовать следующее регулярное выражение:

/[^a-z0-9._-]/i
  • я в конце концов, чтобы сделать шаблон сопоставление без учета регистра. Вы можете бросьте его и используйте: /[^a-zA-Z0-9._-]/
  • - (дефис) имеет особое значение в классе char, если он окружен обоими односторонний, поэтому мы ставим его в конце так, чтобы его трактовали буквально. Вы также можете делать: /[^a-z0-9.\-_]/ где мы находимся избегая дефиса
  • Точка в классе char не является мета символ, следовательно, будет рассматриваться буквально и не нужно убегать.
2 голосов
/ 01 марта 2010

Легко, просто добавьте эти символы к регулярному выражению

$username = preg_replace('/[^a-zA-Z0-9._-]/','',$username)

. должен быть экранирован, потому что это символ 'matchall', - идет в конце, потому что в противном случае он будет использоваться для определения диапазона (мы могли бы, конечно, только экранировать его).

1 голос
/ 01 марта 2010
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);

Ваш текущий код на самом деле разрешает и A-Z, и a-z - флаг i помечает ваше регулярное выражение как нечувствительное к регистру.

1 голос
/ 01 марта 2010

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

/[A-Z0-9._-]/
1 голос
/ 01 марта 2010
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);

Удаляет все, что не является ([^]) одним из символов в группе. Обратите внимание, что гиперн является последним там, поэтому он теряет свое особое значение.

0 голосов
/ 01 марта 2010

Попробуйте

$username = preg_replace('/[^a-z0-9.-_]/i', '', $username);
0 голосов
/ 01 марта 2010
$username = preg_replace('/[^a-z0-9._-]/i', '', $username);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...