Я пытаюсь проверить формат почтовых индексов Великобритании, используя регулярное выражение, найденное здесь: UK Postcode Regex (всеобъемлющий)
Мой тестовый PHP-код следующий: с кодом $ code почтовый индекс для тестирования
$regex = '(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[CIKMOV]]{2})'; echo preg_match($regex,strtoupper($code));
Я получаю эту ошибку: Message: preg_match() [function.preg-match]: Unknown modifier '|'
Я не думаю, что проблема с регулярным выражением – это было подтверждено как ответ, и там было довольно много трафика, поэтому я считаю, что это должно было работать для других людей.
Вы видите, что я делаю неправильно? Я не эксперт по регулярному выражению, поэтому я борюсь. Вопрос в Regex для проверки UK Post Codes очень похож, но, реализуя решение (добавив ^ в начале и $ в конце), я получаю новую ошибку «Без конечного разделителя» ^ «найдено» …
Я считаю, что ваш шаблон регулярного выражения должен быть заключен в /.../
, поэтому:
$regex = '/(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[CIKMOV]]{2})/';
PHP требует делителей вокруг регулярного выражения в стиле Perl. После того, как разделители приходят с любыми модификаторами . Выберите символ, который вы не используете в регулярном выражении. Наиболее распространенным является /
.
$regex = '/(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[CIKMOV]]{2})/';
Это объясняет сообщение об ошибке, которое вы видите. Он думает, что регулярное выражение (GIR 0AA)
с круглыми скобками в качестве разделителей, а затем пытается разобрать |
как модификатор.
Вы должны использовать разделители в ваших выражениях preg_
.
Например:
$regex = '#(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[CIKMOV]]{2})#'; ^ here and here ^
попробуйте поставить бары в начале и конец выражения, например: /expression/
$regex = "/(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[CIKMOV]]{2})/"
если u хочет, чтобы выражение было чувствительным к регистру, положите i
(из «нечувствительного») после концевой строки. /expression/i
$regex = "/(GIR 0AA)|((([AZ-[QVX]][0-9][0-9]?)|(([AZ-[QVX]][AZ-[IJZ]][0-9][0-9]?)|(([AZ-[QVX]][0-9][A-HJKSTUW])|([AZ-[QVX]][AZ-[IJZ]][0-9][ABEHMNPRVWXY]))))\s?[0-9][AZ-[CIKMOV]]{2})/i"