2013-11-14 25 views
3

有一種簡單的方法來做的事情(在JavaScript中)取決於郵政編碼? 更確切地說,用戶將輸入一個郵政編碼,如果該郵政編碼在美國大陸以外(如夏威夷,阿拉斯加,波多黎各等),那麼它會做類似隱藏免費送貨選項的東西。我知道這可以很容易地與州領域完成,但郵政編碼領域呢?需要JavaScript檢查郵政編碼爲夏威夷阿拉斯加,等

+4

您是否有要查找的郵編數據庫? – epascarello

回答

4

在美國大陸位置(不含當然阿拉斯加,夏威夷和美國領土)的集合的所有郵政編碼可以被定義如下:

郵編大於00999且小於96200

OR

郵編是等於或大於97000且小於99500

function isInContinentalUSA(zipcode) 
{ 
    if((zipcode>'00999' && zipcode <'96200') || (zipcode>='97000' && zipcode <'99500')) { 
     return true; 
    } else { 
     return false; 
    } 
} 

UPD ATE:

離島美國領土遵循這些規則,所以我在上面更新的代碼管理波多黎各

US Outlying territories 
AP: 962** - 966** 
PW/FM/MH/MP/GU: 969** 
AS: 96799 
PR: 006-009 

從Addoa分配:http://addoa.com/blog/how-restrict-free-shipping-magento

+0

其實..我發現00988作爲波多黎各的郵編..所以它會超過這個數字。 – Malachi

+0

好點,我會更新。 –

0

您需要在客戶端列出一些列表,以確定是否允許使用郵政編碼。

或者您需要ping服務器以檢查郵政編碼是否符合您的給定參數。

0

http://www.unitedstateszipcodes.org/hi/顯示,夏威夷郵政編碼開始,967和968。 http://www.unitedstateszipcodes.org/ak/顯示阿拉斯加郵政編碼以995,996,997,998和999開頭。

所以,你想要的東西像硫S:

// var zipCodeStr 
var notContinental = zipCodeStr.match(/^(967|968|995|996|997|998|999)/); 

編輯

megawc帶來了良好的心態,如果我想成爲最有效的,我應該用test,不match。因此,我建議這樣的代碼:

var notContinental = /^(967|968|995|996|997|998|999)/.test(zipCodeStr); 

而且,我發現我以前的正則表達式失蹤998和999,所以我加了他們

+1

認爲你應該改變爲'/ ^(96 [7-8] | 99 [5-7])\ d {2} $ /' – megawac

+0

@megawac我沒有數字我正在驗證郵政編碼,它。我也可以處理ZIP + 4:'/ ^(967 | 968 | 995 | 996 | 997)\ d {2}( - \ d {5})?/',但我只是測試AK或HI 。驗證是一個完全不同的問題,我可以提出一個很好的例子,它應該是一個單獨的問題。 (在我看來,驗證不應與業務邏輯相結合。) –

+0

我想,因爲你使用的比賽,你想找到郵政編碼,如果它的非洲大陸,而不僅僅是代碼的開始 – megawac