正则表达式德语邮政编码


Regular Expression German ZIP-Codes

我放弃了。我需要一个 (PHP( 正则表达式,它只匹配从 01001 到 99998 的 5 位数字。

因此,例如 1234 无效,但不是 01234。此外,01000 无效,01002 无效,依此类推。除 99999 以外的任何其他 5 位数字均有效。

我拥有的是以下正则表达式,它满足了我的要求 - 除了它仍然与 99999 匹配。

谁能帮忙?谢谢。。。

^01'd'd[1-9]|[1-9]'d{3}[(?<=9999)[0-8]|[0-9]]$

更新

对不起,大家,但事情更复杂。我没有正确解释。例如,德国邮政编码也可以是04103(请参阅此处的一些进一步示例列表(

你很接近:

^0[1-9]'d'd(?<!0100)0|0[1-9]'d'd[1-9]|[1-9]'d{3}[0-8]|[1-9]'d{3}(?<!9999)9$

但是,如果您可以做一个更简单的正则表达式,然后使用单独的数字比较,那可能会更容易阅读。

或者,更简单的版本:

^(?!01000|99999)(0[1-9]'d{3}|[1-9]'d{4})$

(更简单的版本只是"将数字01000 - 99999并通过前瞻删除两端。

最快的方法是检查字符串是否由 5 位数字组成,然后检查它是否在指定范围内:

if ( preg_match('/^'d{5}$/', $input) && (int) $input > 1000 && (int) $input < 99999 ) {}
'b(?!01000)(?!99999)(0[1-9]'d{3}|[1-9]'d{4})'b

编辑:已更正,感谢海因。

如果您可以避免使用纯正则表达式,这将验证邮政编码:

function validate( $num ) {
    if( !preg_match( '/^'d{5}$/', $num ) ) {
        return false;
    }
    return ( $num > 1000 && $num < 99999 ); 
}

我找到了许多国家的解决方案。

<?php
$country_code="US";
$zip_postal="11111";
$ZIPREG=array(
    "US"=>"^'d{5}(['-]?'d{4})?$",
    "UK"=>"^(GIR|[A-Z]'d[A-Z'd]??|[A-Z]{2}'d[A-Z'd]??)[ ]??('d[A-Z]{2})$",
    "DE"=>"'b((?:0[1-46-9]'d{3})|(?:[1-357-9]'d{4})|(?:[4][0-24-9]'d{3})|(?:[6][013-9]'d{3}))'b",
    "CA"=>"^([ABCEGHJKLMNPRSTVXY]'d[ABCEGHJKLMNPRSTVWXYZ])' {0,1}('d[ABCEGHJKLMNPRSTVWXYZ]'d)$",
    "FR"=>"^(F-)?((2[A|B])|[0-9]{2})[0-9]{3}$",
    "IT"=>"^(V-|I-)?[0-9]{5}$",
    "AU"=>"^(0[289][0-9]{2})|([1345689][0-9]{3})|(2[0-8][0-9]{2})|(290[0-9])|(291[0-4])|(7[0-4][0-9]{2})|(7[8-9][0-9]{2})$",
    "NL"=>"^[1-9][0-9]{3}'s?([a-zA-Z]{2})?$",
    "ES"=>"^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$",
    "DK"=>"^([D-d][K-k])?( |-)?[1-9]{1}[0-9]{3}$",
    "SE"=>"^(s-|S-){0,1}[0-9]{3}'s?[0-9]{2}$",
    "BE"=>"^[1-9]{1}[0-9]{3}$"
);
if ($ZIPREG[$country_code]) {
    if (!preg_match("/".$ZIPREG[$country_code]."/i",$zip_postal)){
        //Validation failed, provided zip/postal code is not valid.
    } else {
        //Validation passed, provided zip/postal code is valid.
    }
} else {
    //Validation not available
}
?>

这是德国邮政编码的最终严格解决方案。取消链接其他解决方案,此解决方案仅接受 5 位数字(66111 = 正常6611166111 = 错误,asd66111 = 错误(。

正则表达式:'b((?:0[1-46-9]'d{3})|(?:[1-357-9]'d{4})|(?:[4][0-24-9]'d{3})|(?:[6][013-9]'d{3}))'b