为什么没有使用的美国邮政编码即使在PHP中使用正确的regex进行验证后也可以接受


Why the US zip codes which are not in use is accepting even after validating with proper regex in PHP?

我正在PHP中验证美国邮政编码值。从一个表单中,我从最终用户那里得到了一个邮政编码值。如果它不是有效的美国邮政编码,则应该引发错误。它抛出了一些值,有些甚至不是无效的美国邮政编码。假设用户输入邮政编码值35302,则由于353未被使用,所以必须抛出错误。有关当前正在使用和未使用的邮政编码,您可以参考此链接维基百科链接到所有可用的美国邮政编码值

现在让我们来看看我用于验证的正则表达式代码:

function zip_code($str) {    
    return (bool) preg_match("/^([0-9]{5})(-[0-9]{4})?$/i", $str);
  }

注意:此处$str包含要验证的邮政编码值。

请帮我纠正我在代码中犯的错误。

提前谢谢。

正如vks所说,regex不知道您要使用什么类型的数据。

正则表达式用于模式匹配,没有更多,也没有更少。

您可以使用正则表达式提取邮政编码的前三位数字,并将其与您拥有的邮政编码数据进行比较。

USPS有一个API来查找邮政编码。您可以直接调用它,而不是使用正则表达式(首先,正则表达式不能保证特定代码有效,只能保证前缀有效):https://www.usps.com/business/web-tools-apis/address-information-api.htm