Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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 - Fatal编程技术网

Javascript 验证包含浮点的文本字段是否为有效的百分比值?

Javascript 验证包含浮点的文本字段是否为有效的百分比值?,javascript,jquery,Javascript,Jquery,我有一个表单文本字段,它有一个KeyUp事件。在键盘上,我忽略了数字键、句点键、退格键、删除键和光标键。因此,字段中的唯一内容可以是数字或句点 我需要验证这些内容(数字将变成不超过100.00%的百分比): -文本字段字符串是一个有效数字(除非有人输入两个“.”,否则该数字应始终为真)。 -文本字段字符串的最大小数位数为2位 -如果文本字段字符串有一个小数点,则后面会有一些内容(小数点后1或2位,而不仅仅是结尾的句点) -这个数字不大于100(试试这个表达式:100%是更通用模式的特例 var

我有一个表单文本字段,它有一个KeyUp事件。在键盘上,我忽略了数字键、句点键、退格键、删除键和光标键。因此,字段中的唯一内容可以是数字或句点

我需要验证这些内容(数字将变成不超过100.00%的百分比): -文本字段字符串是一个有效数字(除非有人输入两个“.”,否则该数字应始终为真)。 -文本字段字符串的最大小数位数为2位 -如果文本字段字符串有一个小数点,则后面会有一些内容(小数点后1或2位,而不仅仅是结尾的句点)
-这个数字不大于100(试试这个表达式:100%是更通用模式的特例

var re = /^((0|[1-9]\d?)(\.\d{1,2})?|100(\.00?)?)$/;
解释

(0 |[1-9]\d?
允许0到99之间的数字

(\.\d{1,2})
允许在后面加上1或2个数字的点

|
否则

100
接受100

(\.00?)
带有可选的0或00

编辑:


我尝试了这个JSFIDLE演示,它正在工作…查看控制台,您可以将字段长度限制为5,检查值是否可以转换为数字,然后验证数字是否在0到100之间。您将无法输入100.00,但为什么需要输入


还有,一把测试用的小提琴。如果你真的关心验证“95”,请注意如果为false,则必须为此添加额外的验证。但是,我建议不要使用此要求,因为它仍然表示有效百分比,并且不会影响计算结果。

有些人会建议使用正则表达式,但我认为小函数更适合此类验证:

function validate(x) {
    var parts = x.split(".");
    if (typeof parts[1] == "string" && (parts[1].length == 0 || parts[1].length > 2))
        return false;
    var n = parseFloat(x);
    if (isNaN(n))
        return false;
    if (n < 0 || n > 100)
        return false;

    return true;
}

console.log(validate("95"));
console.log(validate("95."));
console.log(validate("95.0"));
console.log(validate("95.00"));
console.log(validate("95.000"));
console.log(validate("101.01"));
console.log(validate("101"));
函数验证(x){
变量部分=x.分割(“.”);
如果(部件[1]的类型=“字符串”&&(部件[1]。长度==0 | |部件[1]。长度>2))
返回false;
var n=parseFloat(x);
if(isNaN(n))
返回false;
如果(n<0 | | n>100)
返回false;
返回true;
}
控制台日志(验证(“95”);
日志(验证(“95”);
日志(验证(“95.0”);
控制台日志(验证(“95.00”);
控制台日志(验证(“95.000”);
console.log(验证(“101.01”);
控制台日志(验证(“101”);

太棒了,非常感谢。:)不过我发现了一个缺陷。两个句点返回true,如“90.1”。将返回true。也许我能弄明白。我想你可以再放一个if语句,检查是否有超过1个句点的计数(或类似的情况)。反复练习并添加这是最后一个if子句:if((x.length-x.replace(/\./g,”).length)>1)返回false;干得好,兄弟!可以接受99.9或99.97或任何小数点吗?请给我一些建议。谢谢
function validate(x) {
    var parts = x.split(".");
    if (typeof parts[1] == "string" && (parts[1].length == 0 || parts[1].length > 2))
        return false;
    var n = parseFloat(x);
    if (isNaN(n))
        return false;
    if (n < 0 || n > 100)
        return false;

    return true;
}

console.log(validate("95"));
console.log(validate("95."));
console.log(validate("95.0"));
console.log(validate("95.00"));
console.log(validate("95.000"));
console.log(validate("101.01"));
console.log(validate("101"));