使用PHP

时间:2015-07-28 06:16:01

标签: php regex yii street-address

我需要使用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

这是假的。

#,街道名称,邮政编码,城市,国家/地区是地址格式。

4 个答案:

答案 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;
}
相关问题