如何验证用户输入的邮政编码是否正确美国邮政编码

时间:2010-07-13 11:24:11

标签: ruby-on-rails ruby validation ruby-on-rails-plugins zipcode

我想验证用户输入的邮政编码是否有效。

for example用户输入009876654但无效,则应提供错误消息。

我知道我可以使用javascript regulr expression或使用ajax-zip-code-database

来实现

但我不想要任何上述内容。我需要一些插件的东西,它发送请求到一些在线应用程序,以检查它是否有效。我想要这个,因为我不想小心,如果将来有邮政编码或新拉链的变化代码被添加。

P.S。 : - 我不想使用javascript或使用ajax-zip-code-database

2 个答案:

答案 0 :(得分:1)

webservicex上有一个Web服务可以为您提供GET甚至POST调用的XML结果。我从来没有使用它,但它似乎是你正在寻找的。

不存在的邮政编码会返回空数据集

wget http://www.webservicex.net/uszip.asm /GetInfoByZIP?USZip=60001

<?xml version="1.0" encoding="utf-8"?>
<NewDataSet>
  <Table>
  <CITY>Alden</CITY>
  <STATE>IL</STATE>
  <ZIP>60001</ZIP>
  <AREA_CODE>815</AREA_CODE>
  <TIME_ZONE>C</TIME_ZONE>
</Table>
</NewDataSet>

答案 1 :(得分:0)

假设您的应用程序与其使用条款在商业上兼容,我想知道您是否可以使用Google的gecoder服务查找邮政编码,然后检查结果是否存在。我会假设如果你找回一个邮政编码和一个理智的lat,lng对,你可以得出结论,邮政编码是真实的。

下面的代码(诚然使用现已弃用的V2 API显示了一种以美国为中心的搜索方法)。优点是最终用户和Google计算资源和带宽用于验证。

我不知道这对你的目的是否有点沉重,虽然我发现谷歌的编码器速度非常快。

gecoder = new GClientGeocoder();

geocoder.getLocations(zipcode, function(response) {
    if (response && response.Status.code === 200) {
        var places = response.Placemark;
        for (var p in places) {
            if (places[p].AddressDetails.Country.CountryNameCode === 'US') {
                // lat => places[p].Point.coordinates[1],
                // lng => places[p].Point.coordinates[0],
                // zip => places[p].AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber
            }
        }
    }
});