1

可能性がある場合は、正規表現をif((!regex.test(sybol ....条件)と組み合わせる方法と、コードビューを失うことなくコードを短縮する方法を尋ねたいと思いました。また、 、ダッシュは最初に1つだけ、入力は1つだけにすることができ、ドットも同じです。

$( this ).bind( 'keypress', function( e ){

    var code = e.keyCode || e.which;
    var symbol = String.fromCharCode( code );
    var regex = /[-0-9]|[\b]/;
    var currVal = $( this ).val();
    var insideInput = currVal.indexOf( '-' );

    if( ( !regex.test( symbol ) && code != 37 && code != 39 && code != 46 ) ||
 ( code == 45 && insideInput == 0 ) || ( currVal.length != 0 && code == 45 ) ) {

        e.preventDefault();
    }

});
4

2 に答える 2

1

数字のみを入力したい場合は、以下を使用できます。

$('#test').on('input', function() {

    var oldVal = $(this).val();

    // remove everything but digits
    var newVal = oldVal.replace(/[^\d]/g, '');

    // put leading minus back in place (if there was one)
    if(oldVal.trim().length > 0 && oldVal.trim()[0] == '-') {
        newVal = '-' + newVal;
    }

    $(this).val(newVal);

});​

このデモを参照してください。

さらに必要な場合は、質問を更新してください(スクリプトで何を達成しようとしているのか説明してください)。

于 2012-10-24T07:25:00.263 に答える
0

そこで、 Michal Kloudaのアイデアと鉱山を組み合わせて、この機能を実行しました。

$('input').bind('keypress paste', function(e) {

    var currVal = $(this).val();

    var code = e.keyCode || e.which;
    var symbol = String.fromCharCode( code );
    var regex = /[0-9\-]|[\b]/;

    if( 
        !regex.test( symbol ) && code != 37 && code != 39 && code != 46 || 
        symbol == '%' ||
        currVal.length > 0 && currVal[0] == '-' && symbol == '-' ||
        currVal.length > 0 && symbol == '.' && currVal.indexOf( '.' ) > -1 ||
        currVal.length < 1 && symbol == '.' ||
        currVal.length < 2 && symbol == '.' && currVal[0] == '-' 
    ){

        e.preventDefault();
    }
});

いくつかの説明:

正規表現=/[0-9 \-] | [\ b] /;

ダッシュ、%、バックスペース記号を除くすべての非数値記号を削除します。%記号が削除されないのはなぜですか、見つかりません。(コードを改善するためのもう1つの場所)

  • code!=37//左矢印を残す
  • code!=39//右矢印を残す
  • code!=46//削除ボタンでコードを削除できます
  • symbol ==%//パーセント記号を禁止します

他の条件では、1つのドットと1つのダッシュシンボルを書き込むことができます。ダッシュは最初にのみ許可され、ドットはダッシュありまたはなしの2つの条件で許可されます。ダッシュは3位置から許可され、2位置からは許可されませんが、1回だけです。また、ユーザーがクリップボードからコードを貼り付けるのを防ぎます。

コードテスト済み:

  • IE7 +
  • FF
  • クロム
  • サファリ
  • オペラ

デモをお試しください

PS:助けてくれたMichalKloudaに感謝します。

于 2012-10-24T11:52:25.227 に答える