2012-01-18 3 views
0

У меня есть следующий код для проверки ик почтовых индексов Я использую это как правила проверки в CodeIgniter, но я получаю следующее предупреждение:Uk проверки почтовых индексов Предупреждение Сообщение

Серьезность: Предупреждение

сообщение: preg_match() [function.preg матча]: Компиляция не удалось: отсутствует) по смещению 426

Имя файла: модели/user_profile.php

Порядковый номер: 126

Он всегда возвращает значение false, независимо от того, какой почтовый индекс введен, может кто-нибудь определить, что не так?

//Check and validate uk postcode 
function _valid_postcode($field) { 
    $regex = '!^([A-PR-UWYZa-pr-uwyz]([0-9]{1,2}|([A-HK-Ya-hk-y][0-9]|[A-HK-Ya-hk-y][0-9]([0-9]|[ABEHMNPRV-Yabehmnprv-y]))|[0-9][A-HJKS-UWa-hjks-uw])\{0,1}[0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}|([Gg][Ii][Rr]\0[Aa][Aa])|([Ss][Aa][Nn]\{0,1}[Tt][Aa]1)|([Bb][Ff][Pp][Oo]\{0,1}([Cc]\/[Oo]\)?[0-9]{1,4})|(([Aa][Ss][Cc][Nn]|[Bb][Bb][Nn][Dd]|[BFSbfs][Ii][Qq][Qq]|[Pp][Cc][Rr][Nn]|[Ss][Tt][Hh][Ll]|[Tt][Dd][Cc][Uu]|[Tt][Kk][Cc][Aa])\{0,1}1[Zz][Zz]))$!'; 

    $result = preg_match($regex, $field); 

    if($result > 0) { 
     return TRUE; 
    } else { 
     $this->error_message($field, 'Please enter a valid postcode'); 
     //return FALSE; 
    } 
} 
+1

Вы можете упростить свое регулярное выражение, сделав его нечувствительным к регистру. – Xophmeister

+1

Кажется, что не нравится SW1A 1AA, который является действующим британским почтовым индексом –

ответ

0

отсутствует)

Ваш (первый) открытие ( не имеет закрывающий ). Я предлагаю использовать текстовый редактор (например, Vim), который поможет вам сопоставить ваши круглые скобки.

Я не могу сказать из этого массивного регулярного выражения , где закрытие ) должно идти.

Возможно попробовать один из них: http://regexlib.com/REDetails.aspx?regexp_id=260

Например:

function is_valid_postcode($postcode) { 
    $validation_expression = '/^(((([A-PR-UWYZ][0-9][0-9A-HJKS-UW]?)|([A-PR-UWYZ][A-HK-Y][0-9][0-9ABEHMNPRV-Y]?))\s{0,2}[0-9]([ABD-HJLNP-UW-Z]{2}))|(GIR\s{0,2}0AA))$/i'; 

    return preg_match($validation_expression, $postcode); 
} 

... возвращает ожидаемые результаты на образцах я попробовал (в том числе 'SW1A 1AA') и добавив к i конец прекрасно сочетается с строчными записями почтового индекса.


Следующие комментарии.

Это не имеет дело с ведущими или конечными пробелами. Вы можете легко добавить звонок в trim(), если это представляет проблему для вас. Я бы не добавил это к регулярному выражению, поскольку он уже очень длинный.

И согласно the documentation ...

preg_match() возвращает количество раз спичек картины. Это будет либо 0 раз (нет совпадений), либо 1 раз, потому что preg_match() прекратит поиск после первого матча. preg_match() возвращает FALSE [0] если произошла ошибка.

+0

, все это будет работать с preg_match? – user794846

+0

Я не знаю о * все *, но я обновил свой ответ. – Johnsyweb

+0

ok обновил мою функцию с вашим регулярным выражением, но она все еще всегда возвращает сообщение об ошибке, как указано выше – user794846

Смежные вопросы