Мне не нужен город или адрес, только штат. И я не хочу делать вызов API, если это возможно. Приоритетом является легковесное решение, в идеале просто Javascript.
У меня есть пользовательский ввод zipcode
, и я хочу отобразить абзац текста в зависимости от состояния, в котором находится почтовый индекс. Я знаю, что поиск города намного сложнее а также Государство, и для этого API, такой как тот, который выставляет USPS, вероятно, лучше. Но чтобы сопоставить состояние, возможно, только по первым трем числам, решение (я думаю) должно быть простым и легким.
Javascript в идеале. PHP также может работать.
Данные почтового индекса в США достаточно стабильны что вы можете сделать это без нажатия API или базы данных, если только государство (не город или что-нибудь еще) нужно.
Вот облегченное решение JS:
function getState(zipcode) {
// Ensure param is a string to prevent unpredictable parsing results
if (typeof zipcode !== 'string') {
console.log('Must pass the zipcode as a string.');
return;
}
// Ensure you don't parse codes that start with 0 as octal values
const thiszip = parseInt(zipcode,10);
// Code blocks alphabetized by state
if (thiszip >= 35000 && thiszip <= 36999) {
thisst = 'AL';
thisstate = "Alabama";
}
else if (thiszip >= 99500 && thiszip <= 99999) {
thisst = 'AK';
thisstate = "Alaska";
}
else if (thiszip >= 85000 && thiszip <= 86999) {
thisst = 'AZ';
thisstate = "Arizona";
}
else if (thiszip >= 71600 && thiszip <= 72999) {
thisst = 'AR';
thisstate = "Arkansas";
}
else if (thiszip >= 90000 && thiszip <= 96699) {
thisst = 'CA';
thisstate = "California";
}
else if (thiszip >= 80000 && thiszip <= 81999) {
thisst = 'CO';
thisstate = "Colorado";
}
else if (thiszip >= 6000 && thiszip <= 6999) {
thisst = 'CT';
thisstate = "Connecticut";
}
else if (thiszip >= 19700 && thiszip <= 19999) {
thisst = 'DE';
thisstate = "Deleware";
}
else if (thiszip >= 32000 && thiszip <= 34999) {
thisst = 'FL';
thisstate = "Florida";
}
else if (thiszip >= 30000 && thiszip <= 31999) {
thisst = 'GA';
thisstate = "Georgia";
}
else if (thiszip >= 96700 && thiszip <= 96999) {
thisst = 'HI';
thisstate = "Hawaii";
}
else if (thiszip >= 83200 && thiszip <= 83999) {
thisst = 'ID';
thisstate = "Idaho";
}
else if (thiszip >= 60000 && thiszip <= 62999) {
thisst = 'IL';
thisstate = "Illinois";
}
else if (thiszip >= 46000 && thiszip <= 47999) {
thisst = 'IN';
thisstate = "Indiana";
}
else if (thiszip >= 50000 && thiszip <= 52999) {
thisst = 'IA';
thisstate = "Iowa";
}
else if (thiszip >= 66000 && thiszip <= 67999) {
thisst = 'KS';
thisstate = "Kansas";
}
else if (thiszip >= 40000 && thiszip <= 42999) {
thisst = 'KY';
thisstate = "Kentucky";
}
else if (thiszip >= 70000 && thiszip <= 71599) {
thisst = 'LA';
thisstate = "Louisiana";
}
else if (thiszip >= 3900 && thiszip <= 4999) {
thisst = 'ME';
thisstate = "Maine";
}
else if (thiszip >= 20600 && thiszip <= 21999) {
thisst = 'MD';
thisstate = "Maryland";
}
else if (thiszip >= 1000 && thiszip <= 2799) {
thisst = 'MA';
thisstate = "Massachusetts";
}
else if (thiszip >= 48000 && thiszip <= 49999) {
thisst = 'MI';
thisstate = "Michigan";
}
else if (thiszip >= 55000 && thiszip <= 56999) {
thisst = 'MN';
thisstate = "Minnesota";
}
else if (thiszip >= 38600 && thiszip <= 39999) {
thisst = 'MS';
thisstate = "Mississippi";
}
else if (thiszip >= 63000 && thiszip <= 65999) {
thisst = 'MO';
thisstate = "Missouri";
}
else if (thiszip >= 59000 && thiszip <= 59999) {
thisst = 'MT';
thisstate = "Montana";
}
else if (thiszip >= 27000 && thiszip <= 28999) {
thisst = 'NC';
thisstate = "North Carolina";
}
else if (thiszip >= 58000 && thiszip <= 58999) {
thisst = 'ND';
thisstate = "North Dakota";
}
else if (thiszip >= 68000 && thiszip <= 69999) {
thisst = 'NE';
thisstate = "Nebraska";
}
else if (thiszip >= 88900 && thiszip <= 89999) {
thisst = 'NV';
thisstate = "Nevada";
}
else if (thiszip >= 3000 && thiszip <= 3899) {
thisst = 'NH';
thisstate = "New Hampshire";
}
else if (thiszip >= 7000 && thiszip <= 8999) {
thisst = 'NJ';
thisstate = "New Jersey";
}
else if (thiszip >= 87000 && thiszip <= 88499) {
thisst = 'NM';
thisstate = "New Mexico";
}
else if (thiszip >= 10000 && thiszip <= 14999) {
thisst = 'NY';
thisstate = "New York";
}
else if (thiszip >= 43000 && thiszip <= 45999) {
thisst = 'OH';
thisstate = "Ohio";
}
else if (thiszip >= 73000 && thiszip <= 74999) {
thisst = 'OK';
thisstate = "Oklahoma";
}
else if (thiszip >= 97000 && thiszip <= 97999) {
thisst = 'OR';
thisstate = "Oregon";
}
else if (thiszip >= 15000 && thiszip <= 19699) {
thisst = 'PA';
thisstate = "Pennsylvania";
}
else if (thiszip >= 300 && thiszip <= 999) {
thisst = 'PR';
thisstate = "Puerto Rico";
}
else if (thiszip >= 2800 && thiszip <= 2999) {
thisst = 'RI';
thisstate = "Rhode Island";
}
else if (thiszip >= 29000 && thiszip <= 29999) {
thisst = 'SC';
thisstate = "South Carolina";
}
else if (thiszip >= 57000 && thiszip <= 57999) {
thisst = 'SD';
thisstate = "South Dakota";
}
else if (thiszip >= 37000 && thiszip <= 38599) {
thisst = 'TN';
thisstate = "Tennessee";
}
else if ( (thiszip >= 75000 && thiszip <= 79999) || (thiszip >= 88500 && thiszip <= 88599) ) {
thisst = 'TX';
thisstate = "Texas";
}
else if (thiszip >= 84000 && thiszip <= 84999) {
thisst = 'UT';
thisstate = "Utah";
}
else if (thiszip >= 5000 && thiszip <= 5999) {
thisst = 'VT';
thisstate = "Vermont";
}
else if (thiszip >= 22000 && thiszip <= 24699) {
thisst = 'VA';
thisstate = "Virgina";
}
else if (thiszip >= 20000 && thiszip <= 20599) {
thisst = 'DC';
thisstate = "Washington DC";
}
else if (thiszip >= 98000 && thiszip <= 99499) {
thisst = 'WA';
thisstate = "Washington";
}
else if (thiszip >= 24700 && thiszip <= 26999) {
thisst = 'WV';
thisstate = "West Virginia";
}
else if (thiszip >= 53000 && thiszip <= 54999) {
thisst = 'WI';
thisstate = "Wisconsin";
}
else if (thiszip >= 82000 && thiszip <= 83199) {
thisst = 'WY';
thisstate = "Wyoming";
}
else {
thisst = 'none';
}
return thisst;
}
Большое спасибо помощи @ kevin-boucher и @ abaldwin99 в разборе небольших кодов Новой Англии и устранении устрашающей восьмеричной ошибки оценки с их ответами Вот.
Также спасибо за большую часть оригинального кода идет в эта полезная страница.
zippopotam.us имеет REST API.
Вот пример того, как получить состояние из ZIP в чистом JavaScript (без библиотек):
var getStatebutton = document.getElementById('GetStateButton');
getStatebutton.onclick = function () {
var zipCode = document.getElementById('ZIPCode');
var zip = zipCode.value;
if (!zip) return;
var url = 'http://api.zippopotam.us/us/' + zip;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
var result = xhr.responseText;
var zippo = JSON.parse(result);
var resultDiv = document.getElementById('divResult');
resultDiv.innerHTML = zippo.places[0].state;
}
};
xhr.open('GET', url, true);
xhr.send(null);
};
ZIP:
<input type='text' id='ZIPCode' value='90210' />
<button id="GetStateButton">Get State</button>
<p></p>State:
<div id='divResult'></div>
или в jsfiddle Если вы предпочитаете.
Вы можете вернуть наиболее вероятное состояние для данного почтового индекса с массивом диапазонов.
Это не валидатор — не каждый номер в диапазоне фактически назначается в виде почтового индекса, и в будущем могут быть добавлены новые диапазоны.
function stateFromZip(z){
z= parseInt(z, 10);// removes leading '0'
if(z<1001 || z>99950) return null;
var i= 69, next, s,
zs= [
[1001, 2791, 'Massachusetts'], [2801, 2940, 'Rhode Island'], [3031, 3897, 'New Hampshire'],
[3901, 4992, 'Maine'], [5001, 5495, 'Vermont'], [5501, 5544, 'Massachusetts'],
[5601, 5907, 'Vermont'], [6001, 6389, 'Connecticut'], [6390, 6390, 'New York'],
[6401, 6928, 'Connecticut'], [7001, 8989, 'New Jersey'], [10001, 14975, 'New York'],
[15001, 19640, 'Pennsylvania'], [19701, 19980, 'Delaware'], [20001, 20039, 'Dist. of Columbia'],
[20040, 20167, 'Virginia'], [20042, 20599, 'Dist. of Columbia'], [20331, 20331, 'Maryland'],
[20335, 20797, 'Maryland'], [20799, 20799, 'Dist. of Columbia'], [20812, 21930, 'Maryland'],
[22001, 24658, 'Virginia'], [24701, 26886, 'West Virginia'], [27006, 28909, 'North Carolina'],
[29001, 29948, 'South Carolina'], [30001, 31999, 'Georgia'], [32004, 34997, 'Florida'],
[35004, 36925, 'Alabama'], [37010, 38589, 'Tennessee'], [38601, 39776, 'Mississippi'],
[39901, 39901, 'Georgia'], [40003, 42788, 'Kentucky'], [43001, 45999, 'Ohio'],
[46001, 47997, 'Indiana'], [48001, 49971, 'Michigan'], [50001, 52809, 'Iowa'],
[53001, 54990, 'Wisconsin'], [55001, 56763, 'Minnesota'], [57001, 57799, 'South Dakota'],
[58001, 58856, 'North Dakota'], [59001, 59937, 'Montana'], [60001, 62999, 'Illinois'],
[63001, 65899, 'Missouri'], [66002, 67954, 'Kansas'], [68001, 68118, 'Nebraska'],
[68119, 68120, 'Iowa'], [68122, 69367, 'Nebraska'], [70001, 71232, 'Louisiana'],
[71233, 71233, 'Mississippi'], [71234, 71497, 'Louisiana'], [73001, 73199, 'Oklahoma'],
[73301, 73301, 'Texas'], [73401, 74966, 'Oklahoma'], [75001, 75501, 'Texas'],
[75502, 75502, 'Arkansas'], [75503, 79999, 'Texas'], [80001, 81658, 'Colorado'],
[82001, 83128, 'Wyoming'], [83201, 83876, 'Idaho'], [84001, 84784, 'Utah'],
[85001, 86556, 'Arizona'], [87001, 88441, 'New Mexico'], [88510, 88589, 'Texas'],
[88901, 89883, 'Nevada'], [90001, 96162, 'California'], [96701, 96898, 'Hawaii'],
[97001, 97920, 'Oregon'], [98001, 99403, 'Washington'], [99501, 99950, 'Alaska']
];
while(i){
next= zs[--i];
if(z>next[0] && z<next[1]) return next[2];
}
return null;
}
stateFromZip ( ‘49125’)
/ * возвращаемое значение: (строка)
Мичиган
* /