2013-03-20 97 views
1

我確定它很簡單,我只是沒有看到它。我一直在尋找例子,儘可能簡短,我似乎無法找到我的問題。Javascript問題:找到匹配的正則表達式問題

我希望驗證郵政編碼字段並使用加拿大郵政編碼格式。我找到了一個表達我希望用它看起來像下面這樣:

var validZIP={ 
    "US":"^\d{5}([\-]?\d{4})?$", 
    "UK":"^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$", 
    "CA":"^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$" 
} 

請注意,在這種情況下,代表加拿大的CA

onChange函數調用下面的方法(平變化類checkValidPostal(this)從輸入):

function checkValidPostal(input) 
{ 
    var re = new RegExp(validZIP["CA"]); 
    var value = input.value.toUpperCase(); 
    if (value.match(re)) 
    { 
     input.value = value; 
     return true;  
    } 
    input.value = ""; 
    return false; 
} 

我已經檢查使用正則表達式行:

http://www.regular-expressions.info/javascriptexample.html,並在該網頁上的偉大工程,但對於某些原因,我無法讓它在我的工作!

請幫忙。

+0

你這是在通過輸入? – 2013-03-20 18:12:47

+0

你爲什麼使用'match'而不是'test'? – 2013-03-20 18:12:49

+0

我傳遞的值如:m5m5m5或M2M2M2等等。我使用了一些console.log語句來驗證測試正在發生,並且值正在通過,但測試返回false。 – NEW2WEB 2013-03-20 18:17:09

回答

4

存在一個問題:當你使用字符串代替regex literals時,你缺少一些擒縱機構。

此外,您可能要使用test而不是匹配。

你可以解決這個問題是這樣的:

var validZIP={ 
    "US": /^\d{5}([\-]?\d{4})?$/, 
    "UK": /^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$/, 
    "CA": /^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/ 
} 

function checkValidPostal(input) { 
    var re = validZIP["CA"]; 
    var value = input.value.toUpperCase(); 
    if (re.test(value)) { 
     input.value = value; 
     return true;  
    } 
    input.value = ""; 
    return false; 
} 
+0

我將在'String#match'上提及'RegExp#test'的使用,您可以在http: //codepen.io/bbuck/pen/cBkou – 2013-03-20 18:20:02

2

在一個字符串中,您需要雙重轉義您的反斜槓,否則它們已經被字符串轉義,並且在RegEx構造函數獲取字符串時沒有反斜槓。

+0

你是說我應該改變:'「CA」:「^([ABCEGHJKLMNPRSTVXY] \ d [ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\ d [ABCEGHJKLMNPRSTVWXYZ] \ d)$」'to this:'「CA 「:」^([ABCEGHJKLMNPRSTVXY] \\ d [ABCEGHJKLMNPRSTVWXYZ])\\ {0,1}(\\ d [ABCEGHJKLMNPRSTVWXYZ] \\ d)$「'? – NEW2WEB 2013-03-20 18:19:32

+0

你是對的!一直是這個問題。我將從數組中的正則表達式字符串中刪除引號。非常感謝Bill! – NEW2WEB 2013-03-20 18:21:16

0

嘗試把圖案,而不是字符串validZIP:

var validZIP={ 
    "US":/^\d{5}([\-]?\d{4})?$/, 
    "UK":/^(GIR|[A-Z]\d[A-Z\d]??|[A-Z]{2}\d[A-Z\d]??)[ ]??(\d[A-Z]{2})$/, 
    "CA":/^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ])\ {0,1}(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/ 
}