1

我想问我如何将我的正则表达式与 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();
    }

});
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]/;

删除所有非数字、破折号、%、退格符号。为什么它不删除 % 符号,我找不到。(还有一个地方可以改进代码)

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

其他条件允许您写一个点和一个破折号。破折号只允许放在第一位,点在两种情况下允许:有破折号或没有破折号。允许从 3 个位置开始破折号,不允许从 2 个位置开始,但只允许一次。它还可以防止用户从剪贴板粘贴代码。

代码测试:

  • IE7+
  • 法郎
  • 铬合金
  • 苹果浏览器
  • 歌剧

尝试演示

PS:感谢Michal Klouda的帮助。

于 2012-10-24T11:52:25.227 回答