2011-08-12 8 views
0

私は、我々はjQuery検証プラグインで、1つの検証ルールが他の検証ルールを抑制しますか?

  1. アルファベット-ZA-Zを入力した場合、それが入力を受け入れる、それが
  2. 特別なを受け入れたことを期待していた上記のコードを実行した後、コード

    <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> 
    

    を以下しています文字を入力するとエラーが表示され、エラーが表示されます

  3. しかし、数字0-9を入力すると、それはメソッドのエラーメッセージを表示します。しかしそれはそれを受け入れた。

なぜこのようなことが起こったのか説明してください。 1つのフィールドに2つの反対の検証ルールが適用された場合に何が起こるかを確認しています。

このコードに間違っていることがある場合、または1つの検証ルールが別のものを抑制していることを教えてください。

ありがとうございました!

答えて

1

Timが正確に指摘するように、^キャレットは、文字クラスの最初の文字である場合にのみメタキャラクタになります。

正規表現を書くときに役立つものは、英語(またはあなたの母国語)で、正規表現とまったく同じものを書くことです。

まず正規表現:あなたの2つの正規表現であることを行うことができます/^[a-zA-Z0-9]+$/の意味:を「文字列一致の先頭文字列の末尾にマッチその後、英数字することができる1つのまたは複数の文字で。 "

第二正規表現:/^[a-zA-Z^0-9]+$/手段:「一個の以上の文字列の一致の開始時にアルファ、^キャレット、または数値にすることができ、その後、文字列の末尾にマッチします。」

このように綴ると、すぐにエラーが発生します。第二の正規表現のために、あなたは、単にそのような許可文字の文字クラスから数値表現を削除する必要があります。

新しい正規表現:/^[a-zA-Z]+$/の意味:を「文字列一致一つ以上のアルファベット文字の開始時に、文字列の終わりにマッチします。"

1

^は、文字クラス内の最初の文字であるときに「not」を意味します。他の位置では、それは文字通り^を意味します。

だから、あなたはおそらく、しかし、私が何かわからない

\Dは「数字以外の任意の文字」を意味し、それはすでにa-zA-Zが含まれています。)方法2の

/^\D+$/ 

をしたいです本当にやろうとしている。これらのルールをすべて1つの正規表現にまとめることができます(しかし、現在は互いに矛盾しているので、やや困惑しています)。

関連する問題