0

数値以外の入力値と入力値の長さが6を超えないようにしようとしています。現在、入力にアルファが含まれている場合、6文字を超えるものをブロックすることで機能します。しかし、アルファまたは6文字を超える場合にブロックに変更すると、何も入力できません。何かご意見は?

<script type="text/javascript">
    $(document).ready(function () {
        var pattern = /^[0-9]+$/;
        $('#input1,#input2').keypress(function (e) {
            var length = this.value.length;
            if (!pattern.test($(this).val()) && (length >= 6)) {
                e.preventDefault();
            }
        }); 
    });
</script>
4

3 に答える 3

3

mazzzzz が言ったことを補足すると、より強力なパターンで必要なものをテストできます。

var pattern = /^\d{1,6}$/;

これは、1 ~ 6 文字の数字 (\d) のみを受け入れます。

于 2012-08-12T05:45:43.293 に答える
2

問題は正規表現の作成方法にあると思います。最初に押された文字は$(this).val()、その関数が終了するまで表示されません(これが、まだ使用できる理由ですe.preventDefault();); これは、正規表現がテストしている val が空白であり、正規表現が一致しないことを意味します。

次の文字を現在の値に追加することをお勧めします。これにより、文字列が何であるかではなく、文字列どうなるかをテストできます。

何かのようなもの:

$(document).ready(function () {
  var pattern = /^[0-9]+$/;
  $('#input1,#input2').keypress(function (e) {
    var curVal = $(this).val() + String.fromCharCode(e.charCode);
    var length = curVal.length;

    if (length > 6 || !pattern.test(curVal)) {
      e.preventDefault();
    }
  }); 
});

これがcodepenです。codepen は、いくつか異なることを行います。コストのかかる正規表現を使用するよりも、これを行うためのより良い方法があるためです (これは常に問題ではありませんが、私は最適化するのが好きです)。

于 2012-08-12T05:29:34.260 に答える
0

ここでは正規表現はまったく必要ないようです。

<input type="text" id="input1" />
<input type="text" id="input2" />

<script type="text/javascript">
    var maxLen = 6,
        helpCodes = [37, 39, 8, 9], // left and right arrows, backspace, tab
        codes = [];
    for(var code = 48; code < 58; code++) { // number keys (48-57)
        codes.push(code);
    }
    $('#input1,#input2').on('keydown', function (e) {
        if(helpCodes.indexOf(e.keyCode) > -1) {
            return true;
        }
        if(e.shiftKey || this.value.length == maxLen
                || codes.indexOf(e.keyCode) < 0 ) {
            return false;
        }
    });
</script>​

デモ

于 2012-08-12T05:59:11.427 に答える