我需要使用php和regex验证完整的地址。这就是我到目前为止所创造的。
<?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 Cremorne,Australia
这是假的。
#,街道名称,邮政编码,城市,国家/地区是地址格式。
答案 0 :(得分:3)
您的正则表达式看起来非常像电子邮件地址验证,强烈建议您根本不知道正则表达式。
我甚至都不会认为这是一个“gimme teh codez”问题,但老实说,如果你打算使用它,你应该学习正则表达式。
\d+
=一个或多个数字
[a-zA-Z ]+
=一个或多个:大写字母,小写字母,空格
因此:
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)
答案 1 :(得分:1)
我不是php专家,但这有帮助吗?:PHP Validation: 1st Line of address and postcode
否则你可以尝试:
这是一个免费的&#34;在框外&#34;这样做的方式。不是100%完美,但它应该拒绝公然不存在的地址。
将整个地址提交给Google的地理编码网络服务(https://developers.google.com/maps/documentation/geocoding/intro)。此服务会尝试返回您提供该位置的确切坐标,即纬度和经度。
根据我的经验,如果地址无效,您将从服务中获得602的结果。肯定存在误报或漏报的可能性,但与其他一致性检查结合使用可能会有用。
另一方面,如果城镇存在,雅虎的地理编码网络服务将返回城镇中心的坐标,但地址的其余部分是虚假的。只要你密切关注,潜在有用到结果中的&#34; precision&#34;字段。答案 2 :(得分:1)
鉴于你的例子:
preg_match('/^[0-9]+ [^,]+, [0-9]+ [^,]+, [a-z]+$/', $input)
鉴于您的格式:
preg_match('/^[0-9]+, [^,]+, [0-9]+, [^,]+, [a-z]+$/', $input)
(您的格式说明中有两个逗号,但不在您的示例中)
[^,]
=一切,但,
答案 3 :(得分:0)
以下是我提出的解决方案:此功能假设街道地址正在单独验证;与city,state和zip分开,但包括完整地址不会导致验证失败。我只是想确保街道地址以数字开头并包含街道名称。我还想确保如果街道名称是(例如,第35街),则验证不会失败。
// 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;
}