仅使用正确的数字输入

时间:2012-10-24 07:16:25

标签: javascript jquery

我想问一下如何将我的正则表达式与if((!regex.test)(sybol ....条件,如果有可能,以及我如何缩短代码?没有丢失好的代码)结合起来视图。此外,短划线只能位于第一位且输入中只有一位,而点位则相同。

$( 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();
    }

});

2 个答案:

答案 0 :(得分: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);

});​

请参阅此DEMO

如果您需要更多内容,请更新您的问题(说明您希望通过脚本实现的目标)。

答案 1 :(得分: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] /;

删除所有非数字,exept短划线,%,退格符号。 为什么它没有删除%符号,我找不到。 (提供代码的另一个地方)

  • code!= 37 //左箭头
  • code!= 39 //留下右箭头
  • code!= 46 //允许使用删除按钮删除代码
  • symbol ==%//阻止百分比符号

其他条件允许您编写一个点和一个短划线符号。 只允许在第一位使用短划线,在两个条件下允许使用点:使用短划线或不使用短划线。 从3个位置允许破折号,没有2个位置,但只有一个。此外,它还可以防止用户从剪贴板粘贴代码。

CODE TESTED:

  • IE7 +
  • FF
  • Safari浏览器

尝试DEMO

P.S:感谢 Michal Klouda 寻求帮助。