所以我正在寻找一个正则表达式或一些解决方案来检测西方国家的街道地址,电话,传真等。
我知道它不会是完美的,但我仍然优先考虑美国和加拿大的街道地址,省/州,邮政编码等......
如果有人出去做这件事就好了,而不是我改写正则表达式...
答案 0 :(得分:1)
加拿大邮政编码可通过Canada Post's website进行验证。
在给定邮政编码的情况下返回一系列有效地址。我不确定是否有适合它的Web API,但它可以提供比正则表达式更好的准确性。
答案 1 :(得分:0)
使用我从this question获得的信息,我搜索了http://regexlib.com并找到了您要找的内容
这匹配邮政编码或邮政编码
^\d{5}-\d{4}|\d{5}|[A-Z]\d[A-Z] \d[A-Z]\d$
电话或传真:
^\+[0-9]{1,3}\([0-9]{3}\)[0-9]{7}$
如Ben提到的那样,您将无法验证地址是否有效,但您可以验证格式是否正确。
答案 2 :(得分:0)
您可以在PEAR::Validate
(它在PHP中)的子包中找到一些有趣的东西,它们对应于您想要的语言环境
例如,在Validate_US
类中:
function postalCode($postalCode, $strong = false)
{
return (bool)preg_match('/^[0-9]{5}((-| )[0-9]{4})?$/', $postalCode);
}
Validate_FR
类中的相同方法:
function postalCode($postalCode, $strong = false)
{
return (bool) preg_match('/^(0[1-9]|[1-9][0-9])[0-9][0-9][0-9]$/',
$postalCode);
}
但请注意,这种正则表达式只允许您验证给定代码看起来有效,而不是实际 有效:有如此多的邮政编码 (还有更多的地址!),我猜这个列表是不可管理的,也是维护的噩梦。
答案 3 :(得分:0)
您可以尝试使用此正则表达式,这适用于所有美国和加拿大邮政编码。例如A1A 1A1加拿大邮政编码和例如99999或99999 8989 Us邮政编码
(^\d{5}(-\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$)