我有以下代码来验证英国邮政编码我在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;
}
}
答案 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
]。