0

3桁のみを許可し、次の基準に合格するテキストボックスの正規表現が必要です。

  1. 数字のみ (234 または 123) または
  2. 最後に小数点以下 1 つだけ (55.1)
  3. スペースを許可しないでください
  4. 10 進数を使用する場合は、10 進数の前後にも数値が必要です (555. または 12. または .12 は許可されません)。

部分的に機能する次の RE があります。

/^\d{0,3}$|^\d{0,2}[\.]\d{1}$/

これを変更する際の助けはありますか?

問題が追加されているように見えます:

キープレスでコードを使用しています。したがって、キーを押すと、押された各値が検証されます。

  if (window.event)    {
        knum = e.keyCode;
    }
    else if (e.which)    {
        knum = e.which;
    }
    kchar = String.fromCharCode(knum);
    numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;

    alert(numcheck.test(kchar));

小数点キーが押された場合は false を返します。55 を入力してから小数を途中で 5.5 にしようとしても、ite は false を返します。

4

3 に答える 3

2

少なくとも 1 桁が必要ですが、多くても 3 桁です。\d{1,3}

また

小数点の前に少なくとも 1 桁、2 桁まで、小数点以下に 1 桁ある必要があります。\d{1,2}[.]\d

したがって、これらを組み合わせて:/(^\d{1,3}$|^\d{1,2}[.]\d$)/

アップデート:

入力フィールドの完全な値ではなく、キープレスイベントに追加された文字をテストしています。これでは期待した結果が得られません。

document.getElementById("yourfield").onkeyup = function(e) {

    // the event
    if (!e) e = window.event;

    // determine the target of the keyup event (the input field)
    var targ;
    if (e.target)
       targ = e.target;
    else if (e.srcElement)
       targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
       targ = targ.parentNode;

    // get the value
    kchar = targ.value;
    numcheck = /^\d{0,3}$|^\d{0,2}[\.]\d{1}$/;

    // test
    alert(numcheck.test(kchar));
}
于 2012-08-01T09:27:49.940 に答える
1

試してみ/^\d{1,3}|(\d{1,2}\.\d)$/ますか?

あなたの文字クラスはピリオドをエスケープしてはならないので、そうすべきですが、 1文字のクラスを作成するのはもったいないという理由[.]だけで書くことを好みます. \.同様に、まったく同じことを意味する\d{1}場合は冗長です。\dまた、空のテキスト ボックスも許可したくないと想定しているので、1 ~ 3 桁、または 1 ~ 2 桁、ピリオド、さらに 1 桁を許可するものを書きました。それが間違っている場合は、最初の範囲を に\d戻すこと{0,3}ができます。これにより、何も含まれていないテキスト ボックスが可能になります。

于 2012-08-01T09:47:50.460 に答える
0

これを使用してください:

/^\d{1,3}$|^\d{1,2}[.]\d$/
于 2012-08-01T09:29:21.143 に答える