英国邮政编码验证警告信息

时间:2012-01-18 10:20:43

标签: php regex validation codeigniter

我有以下代码来验证英国邮政编码我在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 :(得分: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]。