preg_replace: bad regex == 'Неизвестный модификатор'? - PullRequest
8 голосов
/ 04 октября 2011

Я создаю поддельные адреса электронной почты, и я просто хочу убедиться, что они в допустимом формате электронной почты, поэтому я пытаюсь удалить любой символ, которого нет в наборе ниже:

$jusr['email'] = preg_replace('/[^a-zA-Z0-9.-_@]/g', '', $jusr['email']);

У меня не было проблем на моем компьютере с Windows, но на сервере Linux linux я получаю эту ошибку каждый раз, когда запускается этот код:

Warning: preg_replace() [function.preg-replace]: Unknown modifier 'g' in /var/www/vhosts/....

Я думаю, что это строка регулярного выражения, но я не могуприколи это.Маленькая помощь?Спасибо.

Пояснение: Я не пытаюсь разместить все действительные адреса электронной почты (ненужные для моей цели), мне просто нужно выяснить, что не так с моим регулярным выражением preg_replace.

Ответы [ 4 ]

26 голосов
/ 04 октября 2011

g не является допустимым модификатором в PCRE (реализация регулярного выражения, который использует PHP), потому что он просто не нужен; preg_replace() выполнит глобальные замены по умолчанию. Вы найдете модификатор в истинном регулярном выражении Perl, а также в регулярном выражении JavaScript, но не в PCRE.

Просто бросьте g:

$jusr['email'] = preg_replace('/[^a-zA-Z0-9.-_@]/', '', $jusr['email']);
3 голосов
/ 04 октября 2011

В дополнение к / g, внутренняя часть вашего регулярного выражения также кажется недействительной:

[^a-zA-Z0-9.-_@]

Во-первых, «^» (который является мета-символом начала ввода) не имеет смысла внутри [...] (если только вы не разрешите адреса электронной почты, содержащие «^»). Во-вторых, дефис должен быть экранирован или помещен в конец группы, иначе он будет рассматриваться как оператор диапазона. И самое главное, ваше выражение запрещает широкий спектр совершенно действительных адресов электронной почты. Посмотрите примеры .

3 голосов
/ 04 октября 2011

Проблема в том, что g не является действительным модификатором PCRE .Попробуйте посмотреть на preg_match_all .

3 голосов
/ 04 октября 2011

Недопустимый модификатор PCRE.Вот список допустимых модификаторов PCRE:

http://us.php.net/manual/en/reference.pcre.pattern.modifiers.php

Модификатор g (global) по умолчанию включен , поэтому он вам не нужен.

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