【问题标题】:PHP check postal codePHP检查邮政编码
【发布时间】:2014-08-26 12:31:02
【问题描述】:

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

i如果格式是这样的:XXXX – XXX 它是有效的。如果不是,则无效(X 是数字)。

有人告诉我做一个这样的正则表达式,但适用于我的需要:

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

我不仅不知道怎么做,而且我也不知道之后该怎么做。

你们知道如何解决我的问题吗?

【问题讨论】:

  • 我不知道你为什么把这个[ABCEGHJKLMNPRSTVXY] 放在你的正则表达式中。
  • 这只是他们用来指导自己的正则表达式的一个例子,但说实话我真的无法理解
  • 如果你想要数字那么你的正则表达式是完全错误的。
  • @AvinashRaj 这是“某人”提供的一个例子,但这与他想要做的事情无关;)
  • 邮政编码必须包含空格吗?

标签: php html css regex


【解决方案1】:

你可以试试这样的:

/^[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}$/

【讨论】:

  • 最好使用\s* 而不是\s
  • 我在这个网站上尝试过:regex101.com/#pcre,但它不起作用,我介绍了一些邮政编码,如:1111-111 或 2561-122,它不匹配所以在 PHP 中它总是说无效
  • @AvinashRaj :我不确定可能有 0 个或多个空格,是否必须定义此类规则的是作者。
  • @user3807727 :因为你的第一个例子没有完全相同的模式,我会更新我的答案;)
  • 很抱歉我搞砸了这么多,我只是没有使用这些东西的经验
【解决方案2】:

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

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

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

<?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

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多