Domanda

Ok gente ho bombardate intorno per alcuni giorni cercando di trovare una buona soluzione per questo. Quello che ho è due possibili formati di indirizzo.

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

Quello che dobbiamo fare è dividere entrambe le stringhe in giù in un array strutturato come tale

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

Il mio problema principale è come spiegare la mancanza di un numero civico. senza avere l'intero array spostare i dati fino uno.

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

[Edit]

Per coloro che stanno chiedendo questo è quello che sto facendo atm. (Versione più pulita)

     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 
È stato utile?

Soluzione

Invertire la corda, fare la scissione e poi invertire ogni elemento.

Aggiorna : Dal frammento che hai postato, mi pare che si ottiene l'indirizzo da un Google GClientGeocoder segnaposto. Se questo è corretto, perché stai ottenendo l'indirizzo non strutturato ( Placemark.address ) al posto di quello strutturato ( Placemark.AddressDetails )? Questo renderebbe la vita più facile, come si dovrebbe cercare di analizzare solo il ThoroughfareName, che è la parte livello della strada di indirizzo, invece di dover analizzare tutto il resto pure.

Altri suggerimenti

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;
}

Si assuma tutte le strade termina con St, Rd o Ave.

  

indirizzo di var = /[0-9]/.match(string.charAt(0))   ? string.split ( " "): [""   ] .Concat (string.split (" "));

Questo non è particolarmente robusta, ma esso rappresenta per i due casi enumerati ed è concisa ad una sola linea.

Ho un problema simile che sto cercando di risolvere. Sembra che se si guarda per la prima spazio a destra del numero civico, è possibile separare il numero civico dal nome della via.

Qui a Boston si può avere un numero civico che include una lettera! Inoltre, ho visto i numeri civici che includono "1/2". Per fortuna, il mezzo è preceduta da un trattino, quindi non ci sono spazi nel numero di casa. Non so se questo è un principio o se sto solo avere fortuna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top