使用 PHP 进行街道地址验证

Street Address Validation with PHP

我需要使用 php 和正则表达式验证完整地址。这是我到目前为止所创建的。

<?php

$input = '15 Gordon St, 3121 Cremorne, Australia';
if (!preg_match('/^[^@]{1,63}@[^@]{1,255}$/', $input)) {
    echo 'Not matched';
} else {
    echo 'Matched';
}

示例地址。

15 Gordon St, 3121 克雷蒙, 澳大利亚

这是返回错误。

#, Street name, Zip Code, City, Country 是地址格式。

我不是 php 专家,但这有帮助吗?:PHP Validation: 1st Line of address and postcode

否则你可以试试:

这是一种免费的 "outside the box" 方法。不是 100% 完美,但它应该拒绝公然不存在的地址。

将整个地址提交给 Google 的地理编码网络服务 (https://developers.google.com/maps/documentation/geocoding/intro)。此服务会尝试 return 您提供给它的位置的精确坐标,即纬度和经度。

根据我的经验,如果地址无效,您将从服务中得到 602 的结果。肯定存在误报或漏报的可能性,但与其他一致性检查结合使用可能会有用。

(另一方面,Yahoo 的地理编码 Web 服务将 return 城镇中心的坐标,如果该城镇存在但其余地址是伪造的。只要您付费就可能有用密切注意结果中的 "precision" 字段)。

你的正则表达式看起来很像电子邮件地址验证,这强烈表明你根本不知道正则表达式。
我什至不会争辩说这是一个 "gimme teh codez" 问题了,但老实说,如果你打算使用它,你应该学习正则表达式。

\d+ = 一个或多个数字
[a-zA-Z ]+ = 一个或多个:大写字母、小写字母、space

因此:

preg_match('/^\d+ [a-zA-Z ]+, \d+ [a-zA-Z ]+, [a-zA-Z ]+$/', $input)

也可以缩短为:

preg_match('/^(?:\d+ [a-zA-Z ]+, ){2}[a-zA-Z ]+$/', $input)

鉴于您的示例: preg_match('/^[0-9]+ [^,]+, [0-9]+ [^,]+, [a-z]+$/', $input)

鉴于您的格式: preg_match('/^[0-9]+, [^,]+, [0-9]+, [^,]+, [a-z]+$/', $input)(您的格式描述中有两个逗号,您的示例中没有)

[^,] = 一切,但 ,

这是我想出的解决方案:这个函数假设街道地址是单独验证的;与城市、州和邮编分开,但包含完整地址不会导致验证失败。我只想确保街道地址以数字开头并包含街道名称。我还想确保如果街道名称是数字 (例如 35th St.) 验证不会失败。

// Checks for a street number and street name.
// Allows street names to begin w/ numbers.
// eg. '123 35th St.' will pass
// eg. 'West 35th St.' will not pass
function validate_street_address($string) {
$check_pattern = '/\d+ [0-9a-zA-Z ]+/';
$has_error = !preg_match($check_pattern, $string);
// Returns boolean:
// 0 = False/ No error
// 1 = True/ Has error
return $has_error;
}