Адрес Строка Разделить в JavaScript - PullRequest
0 голосов
/ 11 января 2010

Ладно, ребята, я несколько дней бомбил, пытаясь найти хорошее решение для этого. У меня есть два возможных формата адреса.

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

[Изменить]

Для тех, кому интересно, это то, чем я занимаюсь. (более чистая версия)

     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 

Ответы [ 4 ]

2 голосов
/ 11 января 2010

Переверните строку, выполните разбиение, а затем переверните каждый элемент.

Обновление : из опубликованного вами фрагмента мне кажется, что вы получили адрес из метки Google GClientGeocoder. Если это правильно, почему вы получаете неструктурированный адрес (Placemark.address) вместо структурированного (Placemark.AddressDetails)? Это облегчит вашу жизнь, поскольку вам придется пытаться анализировать только ThoroughfareName, который является частью адреса на уровне улицы, вместо того, чтобы анализировать все остальное.

0 голосов
/ 08 июня 2010

У меня похожая проблема, которую я пытаюсь решить. Кажется, что если вы ищете первое место справа от номера дома, вы можете отделить номер дома от названия улицы.

Здесь, в Бостоне, у вас может быть номер дома, который включает в себя букву! Кроме того, я видел номера домов, которые включают «1/2». К счастью, 1/2 предшествует дефис, поэтому в номере дома нет встроенных пробелов. Я не знаю, является ли это стандартом или мне просто везет.

0 голосов
/ 11 января 2010

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

Это не особенно надежно, но оно учитывает два перечисленных случая и сжато только в одной строке.

0 голосов
/ 11 января 2010
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.

...