2009-09-16 126 views
8

我有一個類似的問題,因爲我最近的帖子,但與我試圖轉換爲JavaScript驗證過程的郵政編碼驗證程序。我的腳本看起來是這樣的:JavaScript正則表達式匹配5或9位郵政編碼

var regPostalCode = new RegExp("\\d{5}(-\d{4})?"); 
    var postal_code = $("input[name='txtzipcode']").val(); 
    if (regPostalCode.test(postal_code) == false) { 
     bValid = false; 
     msg = msg + '<li>Invalid Zip Code.</li>'; 
    } 

從我最近發表的文章中,我瞭解了我在開始時需要的轉義字符。基本上這個函數驗證一個郵政編碼,即22601這是正確的,但它不應該驗證22601-1。在22601-9999之類的短劃線之後應該有4位數字。這就像驗證的第二部分總是如此。這個表達再次爲我工作。我錯過了什麼嗎?是否需要另一個轉義字符?

回答

16

添加錨點:new RegExp("^\\d{5}(-\\d{4})?$")。這會強制正則表達式引擎只接受一個匹配項,如果它從字符串的第一個字符(^)開始並結束於匹配的字符串($)的末尾。

請注意,在您的問題中可能存在正則表達式中的拼寫錯誤:第二個\d缺少反斜槓。

+0

這是修復。沒有錯字,只是另一個錯誤。感謝解釋以及解決方案。 –

1

您正則表達式更改爲:

new RegExp("^\\d{5}(-\\d{4})?$") 
-1

我必須失去了一些東西在這裏:

此正則表達式:

var regExUs = /^\\d{5}(-\\d{4})?$/; 

返回null與有效的郵編:

console.log(regExUs.exec("34561-1201")); 
null 
相關問題