Проверка почтового индекса в Великобритании Предупреждение - PullRequest
0 голосов
/ 18 января 2012

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

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

Сообщение: preg_match () [function.preg-match]: ошибка компиляции: отсутствует) по смещению 426

Имя файла: models / 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 Ответ

0 голосов
/ 18 января 2012

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

Ваше (первое) открытие ( не имеет закрытия ).Я предлагаю использовать текстовый редактор (например, 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);
}

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


После комментариев.

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

И согласно документация ...

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

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