0

このコードを試してみましたが、正規表現は常にtrue.

正規表現keypressに加えて、新しい文字を追加する前に値をテストしているためkeyup、最後の文字が追加された場所がわからないため使用したくないという問題もあります(ユーザーは常に入力するとは限りませんchar を入力フィールドの末尾に)。

良い解決策をいただければ幸いです、ありがとう。

$('.myInputField').keypress(function(){
    var val = $(this).val();
    var regexTest = /^[0-9]{0,8}[.][0-9]{0,2}|[0-9]{0,8}$/;
    var ok = regexTest.test(val);
    if(ok)
        return true;
    else
        return false;
4

1 に答える 1

0

次のような正規表現が必要になると思います。

/^\d{0,8}(\.\d{0,2})?$/

.の代わりに使用していましたが\.任意の文字.に一致します。

終わり近くでは、 「?.12」を使用するかどうかを指定できます。

\d数字に制限する近道です。

これには使用しないことを検討してくださいkeypress- keyup(better) またはchange(best) は、検討すべき他のオプションです。

「非常に反応の良い」フィードバックが必要な場合 (単に を使用することはできませんchange)、次のようなことを検討してください (例で使用した単純な CSS よりも優れたアプローチを使用してください)。

$('.myInputField').keyup(function(e){
  var val = $(this).val();
  var regexTest = /^\d{0,8}(\.\d{1,2})?$/;
  var ok = regexTest.test(val);
  if(ok) {
      $(this).css('background-color', 'green');
  } else {
      $(this).css('background-color', 'red');
  }
});

JS フィドルの例

注: 入力に a を入力する場合、小数点以下に少なくとも 1 桁.の数字を入力する必要があるように、コードも変更しました。この編集が本当に必要ない場合は、\d{1,2}\d{0,2}

于 2013-03-24T15:16:15.853 に答える