验证包含浮点数的文本字段是有效的百分比值吗?

时间:2011-12-20 17:13:53

标签: javascript jquery

我有一个包含KeyUp事件的表单文本字段。在KeyUp上我忽略了对数,但是数字,句点,退格,删除和光标键。因此,该领域唯一可以是数字或期间。

我需要验证这些事情(数字将变为%不超过100.00%): - 文本字段字符串是一个有效的数字(除非有人把两个'。'放进去,否则它应该总是为真)。 - 文本字段字符串最多包含2个小数位 - 如果文本字段字符串有一个小数点,它后面有一些东西(1或2个小数位,而不仅仅是结尾的句号) - 数字不大于100(<= 100)

示例(我需要验证的内容):

 95 is true (valid, decimal places not required)

 95. is false (don't need a '.' with no decimal place after)

 95.0 is true

 95.00 is true

 95.000 is false (3 decimal places not valid) 100 is true

 101.01 is false (over 100)

 101 is false (over 100)

我已经看到了一些可以执行该列表的几个部分的内容,但是我不够聪明,无法修改正则表达式以获得我需要的内容。谢谢你的帮助!

3 个答案:

答案 0 :(得分:6)

有些人会建议正则表达式,但我认为一个小函数更适合这样的验证:

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"));

Live example

答案 1 :(得分:4)

尝试这个表达式: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

编辑:

我尝试了这个jsfiddle demo http://jsfiddle.net/pCDVn/1/并且它正在工作......看看控制台

答案 2 :(得分:0)

您可以将字段的长度限制为5,检查该值是否可以转换为数字,然后验证该数字是否在0到100之间。您将无法输入100.00,但为什么会你需要吗?

此外,here's是一个小小的测试对象。请注意,如果你真的关心验证“95”。如果是假的,你将不得不为此添加额外的验证。但是,我建议不要这样做,因为它仍然代表一个有效的百分比,不会影响计算的结果。