12

入力フィールドに属性「pattern」があるかどうかを確認したいのですが、ある場合は、そのパターンに対して正規表現チェックを実行します。これはすでにHTML5で行われていることはわかっていますが、イベントを自分で処理したいと思います。このエラーが発生しました:Uncaught TypeError:オブジェクトa-zA-Zにはメソッド'test'がありません

 ///Check Perform Reg///////////////////////////////////////////////////////
         if ($(this).attr("pattern")) {
             var reg = $(this).attr("pattern");
             var currentValue = $(this).val();


             if (reg.test(currentValue)) {
                 $(this).after($error.clone().text("Invalid Input.Try Again."));
                 $(".error:hidden").fadeIn("slow");
                 hasError = true;
                 return false;
             }

             }
        ///////////////////////////////////////////////////////////////////////////

まだ運がない、

また、ここに私のhtmlがあります:

<div>
    <input class="formInput" name="First Name" pattern="^[A-Za-z_-][A-Za-z0-9_-]*$" type="text"  id="frmFirst" min="2" maxlength="30"  required="required"/>
    <span>First Name</span>
</div>
4

5 に答える 5

28

通常、javascript / jquery ハンドルを使用した正規表現のような

var reg = /pattern/;
if (reg.test($(this).val())) {
    // perform some task
}
于 2012-04-06T04:03:29.793 に答える
4

他の人がすでに述べたように、jQuery attr() メソッドによって返される文字列の代わりにオブジェクトを使用する必要があります。ここで、2 つの違いを確認できます。

「文字列」を返します:

var reg = $(this).attr("pattern");
console.log(typeof reg)

「オブジェクト」で返されます:

var reg = new RegExp($(this).attr("pattern"));
console.log(typeof reg);

したがって、次のように置き換えると:

var reg = $(this).attr("pattern");

と:

var reg = new RegExp($(this).attr("pattern"));

Uncaught TypeError: Object a-zA-Z has no method 'test'エラーは消えます

...しかし、検証はまだうまく機能しません。条件付きロジックは、正規表現テストが TRUE を返した場合にエラーを処理することを示しています。

if (reg.test(currentValue)) {
    //error handling
}

代わりに、テストが FALSE を返す場合、エラーを処理する必要があります。

if (!reg.test(currentValue)) {
    //error handling
}

これはうまくいくはずです。

于 2013-04-17T07:39:38.197 に答える
0

以下は、MVC で Jquery を使用して、正規表現に基づいてテキスト ボックスを検証する適切な方法です。この式は、1 つの文字列で複数の電子メール アドレスを検証するために作成されていることに注意してください。

      var emailReg = new RegExp(/^([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[A-Z]{2,6})*([,;][\s]*([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[A-Z]{2,6}))*$/i);
      var emailText = $('#email').val();

      if (!emailReg.test(emailText)) {
          alert('Wrong Email Address\Addresses format! Please reEnter correct format');
            return false;
        }
    }
于 2015-12-22T19:07:48.877 に答える
0

文字列はRegExpオブジェクトではありません。次のようなものを使用できます。

var reg = new RegExp($(this).attr("pattern"));
于 2012-04-06T04:17:59.373 に答える