我想问一下如何将我的正则表达式与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();
}
});
答案 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短划线,%,退格符号。 为什么它没有删除%符号,我找不到。 (提供代码的另一个地方)
其他条件允许您编写一个点和一个短划线符号。 只允许在第一位使用短划线,在两个条件下允许使用点:使用短划线或不使用短划线。 从3个位置允许破折号,没有2个位置,但只有一个。此外,它还可以防止用户从剪贴板粘贴代码。
CODE TESTED:
尝试DEMO
P.S:感谢 Michal Klouda 寻求帮助。