2011-08-12 87 views
0

我有以下代碼一個驗證規則是否會抑制jQuery驗證插件中的其他驗證規則?

<html> 
<head> 
<title>Untitled Document</title> 
<script type="text/javascript" src="js/jquery-1-4-2.js"></script> 
<script type="text/javascript" src="js/jquery_validate.js"></script> 
<script type="text/javascript"> 

$(document).ready(function(){ 

$("#form1").validate({ 
    rules: { 
      fld1: { 
       methodtwo: true, 
       methodone: true 
      } 
      }, 
    messages: { 
     fld1: { 
      methodtwo: "<br> 2Wrong Project Name.", 
      methodone: "<br> 1Wrong Project Name." 

       } 
     } 

     }); 
}); 

$.validator.addMethod('methodone', function (value) { 
    return /^[a-zA-Z0-9]+$/.test(value); 
}, 'wrong1.'); 

$.validator.addMethod('methodtwo', function (value) { 
    return /^[a-zA-Z^0-9]+$/.test(value); 
}, 'wrong2.'); 



</script> 


</head> 
<body> 
<form id="form1"name="form1" action="" method="get"> 
<table width="80%" border="0"> 
    <tr> 
    <td><input type="text" name="fld1" id="idfld1"></td> 
</tr> 
<tr> 
<td><input type="submit" name="submit" id="idsubmit"></td> 
</tr> 
</table> 
</form> 
</body> 
</html> 

上面的代碼執行後,我期待的是,如果我們進入

  1. 字母A-ZA-Z然後它會接受輸入,並接受
  2. 任何特殊字符它會顯示錯誤,它顯示錯誤
  3. 但是當我們輸入數字0-9時,我期待它會顯示methodtwo錯誤信息。但它接受它。

請解釋一下,爲什麼會發生這種情況?正如我正在檢查,如果兩個相反的驗證規則適用於一個字段會發生什麼。

請給我解釋一下朋友有沒有這個代碼有錯或者一個驗證規則壓制另一個?

謝謝!

回答

1

正如Tim正確指出的那樣,^插入符只是字符類中第一個字符的元字符。

在編寫正則表達式時,有一件事可以用英語(或您選擇的母語)寫出正則表達式匹配的內容。讓我們做到這一點與你的兩個正則表達式:

一正則表達式:/^[a-zA-Z0-9]+$/表示:「在字符串匹配一個或多個字符,可以是字母或數字的開頭,然後匹配字符串的結尾。 「

二正則表達式:/^[a-zA-Z^0-9]+$/手段:「在串匹配一個或多個字符的開始,可以是α,在^插入符號,或數字,則匹配字符串的末尾」。

當你這樣拼出來時,你的錯誤就會立即顯現出來。對於第二個正則表達式,你只需要在字符類允許的字符的刪除數字表達式,像這樣:

新的正則表達式:/^[a-zA-Z]+$/表示:「在字符串相匹配的一個或多個字母字符的開始,然後匹配字符串的末尾。「

1

^僅當它是角色類中的第一個字符時表示「不」。在任何其他位置,這意味着文字^

所以你可能要

/^\D+$/ 

的方法2.(\D指「除了一個任意字符」,並且已經包括a-zA-Z。)

但是,我不知道你是什麼真的很想做。你可以將所有這些規則組合成一個正則表達式(但目前它們互相矛盾,所以有點令人費解)。