使用正则表达式找到无效的邮政编码

问题描述:

我是新来的PHP,我试图编写一个函数来查找无效的邮政编码。这是一种选择,但我一直在说这个心不是理想的格式:使用正则表达式找到无效的邮政编码

function postcode_valid($postcode) { 
    return preg_match('/\w{2,3} \d\w{2}/', $postcode); 
} 

//more accurate 
//[A-Z]{1,2}[0-9]{1,2}[A-Z]? [0-9][A-Z]{2} 

我明白了第一个功能,但我不知道怎么写“理想”的解决方案作为一个功能,可以请你建议?

+1

您需要提供有效邮政编码的示例。什么对你有效?那个评论“更准确”是你想在PHP中使用的正则表达式,而不是你在上面几行使用的正则表达式? –

+0

您居住的每个国家/地区都有很多邮政编码类型。正如ssc-hrep3所述,请为我们提供应该与不应匹配的邮政编码列表。 – Mateus

+0

谢谢大家,我指的是英国邮政编码。我现在从ssc-hrep3得到了答案,谢谢你的帮助。 –

如果您在注释字段提供的正则表达式是正确的,你不知道如何在PHP中使用它,这里是解决方案:

function postcode_valid($postcode) { 
    return preg_match('/^[A-Z]{1,2}[0-9]{1,2}[A-Z]? [0-9][A-Z]{2}$/', $postcode); 
} 

您需要添加两个斜杠(一个在前面,一个在末尾)正则表达式,并将其打包在PHP中的字符串中。我也强烈建议你在开始时使用^$。在正则表达式的末尾指示字符串的开始和结束(否则,它是有效的,如果只有一部分字符串包含正确的模式,即具有有效部分的较长字符串将被接受)。Here is a live example


如果你正在寻找的英国邮政编码验证,你应该使用下面的正则表达式,而不是(source):

(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKPSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2}) 

如果您正在寻找其他的东西,请提供下面的评论。