2014-10-08 122 views
0

我想使用這裏指定的郵政編碼正則表達式:UK Postcode Regex (Comprehensive)與JavaScript,但它似乎並沒有工作。我正在使用:JavaScript正則表達式錯誤測試郵政編碼

var postcode = "^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))$"; 
var aPCode = frm.PCode.value; 
if (!(postcode.test(aPCode))) 
{ 
    AnError += "Invalid Postcode.\n"; 
} 

我得到的錯誤是if (!(postcode.test(aPCode)))行。 IE7(我啓用了JavaScript錯誤的瀏覽器)報告錯誤「對象不支持此屬性或方法」。這意味着我不能在字符串上使用.test方法,但這就是它應該使用的地方,不是嗎?我似乎無法找到我的代碼錯誤。

回答

1

postcode是一個字符串,不是正則表達式。敷在正斜槓和拆除包裝的報價使它成爲一個正則表達式:

var postcode = /^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))$/; 

see the docs

或者運行正則表達式的字符串版本到RegExp對象,將其轉換:

var postcode = "^(([gG][iI][rR] {0,}0[aA]{2})|((([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y]?[0-9][0-9]?)|(([a-pr-uwyzA-PR-UWYZ][0-9][a-hjkstuwA-HJKSTUW])|([a-pr-uwyzA-PR-UWYZ][a-hk-yA-HK-Y][0-9][abehmnprv-yABEHMNPRV-Y]))) {0,}[0-9][abd-hjlnp-uw-zABD-HJLNP-UW-Z]{2}))$"; 
var postcode = new RegExp(postcode);