2016-11-08 62 views
1

我有一個個人函數誰採取一個id和模式來檢查一些輸入。發送模式到函數

var id, schema; 
 
\t function checkField(id, schema){ 
 
\t \t var input = id.val(); 
 
\t \t var pattern = schema; 
 

 
\t \t if (!input.match(pattern)){ 
 
\t \t \t console.log('Input = '+input); 
 
\t \t \t console.log('Pattern = '+pattern); 
 
\t \t \t id.removeClass().addClass("error"); 
 
\t \t \t $(".oke").css({display: 'none'}); 
 
\t \t }else{ 
 
\t \t \t console.log('Classe = ok'); 
 
\t \t \t id.removeClass().addClass("ok"); 
 
\t \t \t $(".nope").css({display: 'none'}); 
 
\t \t } 
 
\t } 
 

 
\t // Vérification téléphone 
 
\t $("#tel").focusout(function(){ 
 
\t \t checkField($(this), "/0[1-7,9]\d{8}/"); 
 
\t }); 
 

 
\t // Vérification code postale 
 
\t $("#cp").focusout(function(){ 
 
\t \t checkField($(this), "/^((0[1-9])|([1-8][0-9])|(9[0-8])|(2A)|(2B))[0-9]{3}$/"); 
 
\t });

但如果條件始終返回null!input.match(pattern))。 兩個控制檯日誌返回輸入中寫入的數字,並且模式正確,爲什麼if總是爲false?

+2

雙引號必須從各地正則表達式被刪除,第一個可能還需要錨('/^0 [1-79] \ d {8} $ /')。第二個可以寫成'/ ^(0 [1-9] | [1-8] \ d | 9 [0-8] | 2 [AB])\ d {3} $ /'。另外,建議用if(!pattern.test(input))替換'if(!input.match(pattern))'' –

+0

非常感謝:) input.match pattern和pattern.test輸入? – Buck

+0

'test()'返回* true *或* false *,而'match'將返回* null *或匹配數據數組。 –

回答

2

當通過"/0[1-7,9]\d{8}/"String#match()d之前單\被移除,因爲它是一個未知的轉義序列和周圍的圖案的/被視爲在圖案字面/符號。因此,你沒有得到任何匹配。另外,字符類中的,也被認爲是一個字面逗號,我相信你想從模式中刪除它。此外,如果您計劃匹配整個字符串,則第一個模式在開始處缺少^,在末尾缺少$定位點。通過"^0[1-79]\\d{8}$"或 - 首選 - 使用正則表達式文字/^0[1-7,9]\d{8}$/(模式周圍沒有雙引號)。

第二種模式可以縮短爲/^(0[1-9]|[1-8]\d|9[0-8]|2[AB])\d{3}$/ - 再次注意,正則表達式文字符號周圍沒有雙引號。

另外,最好是與作爲if (!pattern.test(input))返回regex.test(str)取代if (!input.match(pattern))str.match(regex)或者返回空匹配數據的數組。

所以,你可以使用是

if (!pattern.test(input)){ 
... 

$("#tel").focusout(function(){ 
    checkField($(this), /^0[1-79]\d{8}$/); 
}); 

$("#cp").focusout(function(){ 
    checkField($(this), /^(0[1-9]|[1-8]\d|9[0-8]|2[AB])\d{3}$/); 
}) 
1

JavaScript的正則表達式模式是而不是字符串,你應該刪除雙引號。

$("#tel").focusout(function(){ 
    checkField($(this), /0[1-7,9]\d{8}/); 
}); 

$("#cp").focusout(function(){ 
    checkField($(this), /^((0[1-9])|([1-8][0-9])|(9[0-8])|(2A)|(2B))[0-9]{3}$/); 
})