【问题标题】:Address String Split in javascriptjavascript中的地址字符串拆分
【发布时间】:2023-04-03 05:47:01
【问题描述】:

好吧,伙计们,我已经轰炸了几天,试图为这个问题找到一个好的解决方案。 我有两种可能的地址格式。

28 Main St Somecity, NY 12345-6789    
or 
Main St Somecity, Ny 12345-6789

我需要做的是将两个字符串拆分成一个这样的数组

address[0] = HousNumber 
address[1] = Street 
address[2] = City 
address[3] = State 
address[4] = ZipCode

我的主要问题是如何解释缺少门牌号的原因。没有让整个数组将数据向上移动一个。

address[0] = Street 
address[1] = City 
address[2] = State 
address[3] = ZipCode

[编辑]

对于那些想知道这就是我正在做的 atm 的人。 (更干净的版本)

     place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
    FCmap.setCenter(point,12);


        var a = place.address.split(',');

        var e = a[2].split(" ");

        var x = a[0].split(" ");

        var hn = x.filter(function(item,index){
            return index == 0;
        });

                var st = x.filter(function(item,index){
                    return index != 0;
                });

                var street = ''; 

                st.each(function(item,index){street += item + ' ';});

        results[0] = new Hash({
                        FullAddie:  place.address,
                        HouseNum:   hn[0],
                        Dir:        '',
                        Street:     street,
                        City:       a[1],
                        State:      e[1],
                        ZipCode:    e[2],
                        GPoint:     new GMarker(point),
                        Lat:        place.Point.coordinates[1],
                        Lng:        place.Point.coordinates[0]
                        });
        // End Address Splitting 

【问题讨论】:

  • 更重要的是,您如何区分街道和城市?圣之前有多个单词的道路呢?例如格伦艾尔路
  • 我在做什么,这是一种相当糟糕的做法。是首先拆分逗号上的字符串,给我 2 个字符串,一个带有门牌号 street 和 city ,另一个带有州和邮政编码。从那里我分裂空间。对于州邮编来说,这很容易处理,只有退回的物品。至于addie,我将通过从数组中取出底部项目和顶部项目来获取长街道名称以获得门牌号和城市,然后将剩余部分组合到街道中。我一团糟,不是很准确,因此我的问题在这里。
  • 其余代码在哪里?那是不完整的代码,没有用处。

标签: javascript string street-address


【解决方案1】:

反转字符串,进行拆分,然后反转每个项目。

更新:从您发布的 sn-p 中,在我看来您从 Google GClientGeocoder 地标获得地址。如果这是正确的,为什么你得到的是非结构化地址(Placemark.address)而不是结构化地址(Placemark.AddressDetails)?这将使您的生活更轻松,因为您将不得不尝试仅解析 ThoroughfareName,这是地址的街道部分,而不必解析其他所有内容。

【讨论】:

  • 谢谢我实际上不知道 Placemark.Address.Details 。有了它,它帮助解决了我的大部分问题,让我只能试图找到一种方法来处理缺少门牌号码的问题。根据谷歌现在返回的准确度,我可以更好地处理。
【解决方案2】:
function get_address (addr_str) {
   var m = /^(\d*)\s*([-\s\w.]+\s(?:St|Rd|Ave)\.?)\s+([-\s\w\.]+),\s*(\w+)\s+([-\d]+)$/i.exec(s);
   var retval = m.slice(1);
   if (!retval[0]) retval = retval.slice(1);
   return retval;
}

假设所有街道都以 St、Rd 或 Ave 结束。

【讨论】:

  • 除非它们以 Ct、Pl、Way 结尾或没有这样的后缀。 :-)
  • 或者如果它是“Some St (as in Street) St (as in Saint) Some City”:)
【解决方案3】:

var 地址 = /[0-9]/.match(string.charAt(0)) ? string.split("") : ["" ].concat(string.split(" "));

这不是特别健壮,但它考虑了两种列举的情况,并且只有一行简洁。

【讨论】:

    【解决方案4】:

    我有一个类似的问题正在尝试解决。好像找门牌号右边的第一个空格,就可以把门牌号和街道名分开。

    在波士顿,您可以拥有包含字母的门牌号!此外,我还看到了包含“1/2”的门牌号码。幸运的是,1/2 前面有一个连字符,所以门牌号中没有任何嵌入的空格。我不知道这是一个标准还是我只是走运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      相关资源
      最近更新 更多