PHP检查邮政编码

时间:2014-07-05 12:53:01

标签: php html css regex

我需要验证插入文本框并存储在变量中的邮政编码:" $ code"。

如果格式如下:XXXX – XXX它有效。如果没有,它就无效(X是数字)。

有人告诉我制作像这样的正则表达式但适用于我的需要:

$regex = "/^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$/";

我不仅不知道如何做到这一点,而且我也不知道该怎么做。

你们对如何解决我的问题有任何想法吗?

2 个答案:

答案 0 :(得分:3)

您可以尝试以下方式:

/^[0-9]{4}\s-\s[0-9]{3}$/

或者:

/^\d{4}\s-\s\d{3}$/

编辑:如果-和数字之间有0或更多的空格:

/^\d{4}\s*-\s*\d{3}$/

如果-和数字之间有0或只有一个空格:

/^\d{4}\s?-\s?\d{3}$/

如果您在-和数字之间没有任何空格:

/^\d{4}-\d{3}$/

答案 1 :(得分:0)

那么,对您要验证的邮政编码有一些了解会有所帮助。但这里有一些一般性的建议。

与许多其他语言功能相比,正则表达式非常强大,但也很复杂,难以维护和缓慢。

如果您需要验证数字的长度,只需将其转换为字符串并计算长度。

<?php

$len = strlen((string) $number);
if ($len < 3 || $len > 4) {
    // invalid
}

如果您需要验证号码,请使用PHP's built-in filter functions

<?php

$valid = filter_var(FILTER_VALIDATE_INT, array(
  "options" => array(
    "max" => 9999,
    "min" => 100,
  ),
));

如果需要分隔符,正则表达式可能会派上用场。

<?php

$valid = (boolean) preg_match("/^\d{4}\s(-|–|—)\s\d{3}$/");

或者将正则表达式与过滤函数结合起来。

<?php

$valid = filter_input(INPUT_POST, "postalcode", FILTER_VALIDATE_REGEXP, array(
  "options" => array(
    "regexp" => "/^\d{4}\s(-|–|—)\s\d{3}$/",
  ),
));

虽然您也可以使用纯PHP验证它,但以防正则表达式对于您来说仍然很复杂。

有许多很棒的网站可以学习正则表达式或测试它们。我的个人最爱(不隶属于)是regex101