Не могу использовать определенные символы в регулярном выражении - PullRequest
1 голос
/ 28 октября 2008
if(!eregi("^([0-9a-z_\[\]\*\- ])+$", $subuser))
    $form->setError($field, "* Username not alphanumeric");

Может кто-нибудь сказать мне, почему он не разрешает такие символы, как - и *?

if(!eregi("^([0-9a-z])+$", $subuser))
    $form->setError($field, "* Username not alphanumeric");

Это оригинальный фрагмент кода. Друг изменил его на верхнюю часть, и он будет разрешать a-z и 0-9, но он не позволит другим символам, которые мне нужны. Кто-нибудь может мне помочь?

Заранее спасибо.

Ответы [ 4 ]

7 голосов
/ 28 октября 2008

Ваше регулярное выражение использует синтаксис PCRE, поэтому вы должны использовать preg_match () вместо eregi ().

Попробуйте вместо этого код:

else if (!preg_match("/^([0-9a-z_\[\]* -])+$/i", $subuser)) {
$form->setError($field, "* Username not alphanumeric");
}
4 голосов
/ 28 октября 2008

Для скобочных выражений,

Чтобы включить литерал ‘]’ в список, сделайте его первым символом (после возможного ‘^’). Чтобы включить литерал «-», сделайте его первым или последним символом или второй конечной точкой диапазона. Чтобы использовать литерал ‘-’ в качестве первой конечной точки диапазона, заключите его в [. ’И‘.] ’, Чтобы сделать его элементом сопоставления (см. Ниже). За исключением этих и некоторых комбинаций, использующих ‘[’ (см. Следующие абзацы), все другие специальные символы, включая ‘\’, теряют свое особое значение в выражении в скобках.

Так что это должно делать то, что вы хотите:

"^ ([] 0-9a-z _ [* -]) + $"

3 голосов
/ 28 октября 2008

Не используйте семейство функций ereg - они медленнее и, если я правильно помню, в конечном итоге будут устаревшими.

Это должно исправить

if ( preg_match( "/^[^0-9a-z_\[\]* -]$/i", $subuser )
{
    $form->setError( $field, "* Username not alphanumeric" );
}
1 голос
/ 28 октября 2008

даже с использованием функций preg_ * шаблон должен быть заключен в не алфавитные разделители:

"~ ^ ([0-9a-z _ [] * -]) + $ ~"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...