Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 只允许输入浮点百分比值_Javascript_Jquery_Regex_Validation - Fatal编程技术网

Javascript 只允许输入浮点百分比值

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 $(函数(){ /

我遵循链接,只允许输入类型浮动百分比值。是原始的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

$(函数(){
//只允许数字
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 );
            }
        }        
    });
});