Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 英国邮政编码验证警告消息_Php_Regex_Validation_Codeigniter - Fatal编程技术网

Php 英国邮政编码验证警告消息

Php 英国邮政编码验证警告消息,php,regex,validation,codeigniter,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) {

我有以下代码来验证英国邮政编码,我在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;
    }
} 
缺失)

您的(第一个)开始
没有结束
。我建议使用文本编辑器(例如)来帮助您匹配括号

我无法从这个庞大的正则表达式中分辨出结束符应该放在哪里

或许可以尝试以下方法之一:

例如:

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
可以很好地处理小写邮政编码条目


以下是评论

这不处理前导或尾随空格。如果这给您带来了问题,您可以轻松地向添加呼叫。我不会把它添加到正则表达式中,因为它已经很长了

根据

preg_match()
返回模式匹配的次数。这将是0次(不匹配)或1次,因为
preg\u match()
将在第一次匹配后停止搜索<如果发生错误,code>preg_match()返回
FALSE
[
0
]


您可以简化您的正则表达式,使其不区分大小写。似乎不喜欢SW1A 1AA,它是一个有效的英国邮政编码OK使用您的正则表达式更新了我的函数,但它仍然会像上面一样返回错误消息。我想问题在于if($result>0)我不确定preg_match当前应该返回什么?它似乎一直在导致它返回false。如果您收到相同的错误消息,您仍然有相同的问题。@user794846:如果您不确定函数应该返回什么,您应该阅读文档(我现在在回答中已链接到该文档)!也许你可以用一些测试失败的样本数据来更新你的问题。