Javascript 只允许输入浮点百分比值
我遵循链接,只允许输入类型浮动百分比值。是原始的JSFIDLE 我试图替换正则表达式并使用这个Javascript 只允许输入浮点百分比值,javascript,jquery,regex,validation,Javascript,Jquery,Regex,Validation,我遵循链接,只允许输入类型浮动百分比值。是原始的JSFIDLE 我试图替换正则表达式并使用这个/^((0 |[1-9]\d?)(\.\d{1,2})100(\.00?)$/或这个^([1-9]([0-9])?| 0)(\.[0-9]{1,2})$,但它不起作用 编辑//在我的情况下,只允许0到100之间的浮点数 我使用此函数只允许数值或数字,最大小数点为2 您需要给输入一个data type=“numeric”或data type=“decimal” 你也可以使用HTML5 $(函数(){ /
/^((0 |[1-9]\d?)(\.\d{1,2})100(\.00?)$/
或这个^([1-9]([0-9])?| 0)(\.[0-9]{1,2})$
,但它不起作用
编辑//在我的情况下,只允许0到100之间的浮点数
我使用此函数只允许数值或数字,最大小数点为2 您需要给输入一个
data type=“numeric”
或data type=“decimal”
你也可以使用HTML5
$(函数(){
//只允许数字
var ctrlAltShift=假;
$(文档).keydown(函数(e){
如果(e.keyCode>=16&&e.keyCode=16&&e.keyCode=48&&e.keyCode=96&&e.keyCode=48&&e.keyCode=96&&e.keyCode 2){
var newValue=parseFloat(数学下限(值*100)/100).toFixed(2);
e、 预防默认值();
$(this).val(newValue);
}
}
});
});
它当然可以优化为一个功能
演示:
$(函数(){
//只允许数字
var ctrlAltShift=假;
$(文档).keydown(函数(e){
如果(e.keyCode>=16&&e.keyCode=16&&e.keyCode=48&&e.keyCode=96&&e.keyCode=48&&e.keyCode=96&&e.keyCode 2){
var newValue=parseFloat(数学下限(值*100)/100).toFixed(2);
e、 预防默认值();
$(this).val(newValue);
}
}
});
});代码>
数字:
小数点:
re的问题是小数部分需要同时使用句号和数字。那很难打字;)
请尝试/^(100(\.0{0,2})|(\d{1-9]\d)(\.\d{0,2})$/
。这将允许
没有数字
编辑:将re更改为不允许小数点大于0.00的100
关于您是否可以提及您的示例输入和所需输出?谢谢您的帮助,但在本例中,我可以键入扩展拉丁字母
var pastValue, pastSelectionStart, pastSelectionEnd;
$("input").on("keydown", function() {
pastValue = this.value;
pastSelectionStart = this.selectionStart;
pastSelectionEnd = this.selectionEnd;
}).on("input propertychange", function() {
var regex = /^((0|[1-9]\d?)(\.\d{1,2})?|100(\.00?)?)$/;
if (this.value.length > 0 && !regex.test(this.value)) {
this.value = pastValue;
this.selectionStart = pastSelectionStart;
this.selectionEnd = pastSelectionEnd;
}
});
$(function() {
// allow only numbers
var ctrlAltShift = false;
$(document).keydown(function(e) {
if (e.keyCode >= 16 && e.keyCode <= 18 ) ctrlAltShift = true;
}).keyup(function(e) {
if (e.keyCode >= 16 && e.keyCode <= 18 ) ctrlAltShift = false;
});
$("[data-type=numeric]").keydown( function(e) {
if(
(
!ctrlAltShift && (
( e.keyCode >= 48 && e.keyCode <= 57 ) ||
( e.keyCode >= 96 && e.keyCode <= 105 ) ||
( $.inArray(e.keyCode, [8, 9, 27, 35, 36, 37, 39, 46]) !== -1 )
)
) ||
ctrlAltShift && e.keyCode == 9
) {
return;
}
else {
e.preventDefault();
}
});
// allow only numbers with 2 decimals
$("[data-type=decimal]").keydown( function(e) {
if(
(
!ctrlAltShift && (
( e.keyCode >= 48 && e.keyCode <= 57 ) ||
( e.keyCode >= 96 && e.keyCode <= 105 ) ||
( $.inArray(e.keyCode, [8, 9, 27, 35, 36, 37, 39, 46, 110, 190, 194]) !== -1 )
)
) ||
ctrlAltShift && e.keyCode == 9
) {
if( $.inArray(e.keyCode, [110, 190, 194]) !== -1 ) {
e.preventDefault();
if( $(this).val().length != 0 && $(this).val().indexOf('.') == -1 ) {
$(this).val( $(this).val() + '.');
}
}
}
else {
e.preventDefault();
}
}).keyup(function(e) {
var value = $(this).val();
if( value.indexOf('.') != -1) {
if( value.split(".")[1].length > 2 ) {
var newValue = parseFloat( Math.floor(value * 100) / 100).toFixed(2);
e.preventDefault();
$(this).val( newValue );
}
}
});
});