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

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

我需要validation这些内容(数字将变为%不超过100.00%): – 文本字段字符串是一个有效数字(除非有人将两个’。’放入,否则应始终为真)。 – 文本字段字符串最多包含2个小数位 – 如果文本字段字符串有小数点,则后面有一些内容(1或2个小数位,而不仅仅是结尾处的句点) – 数字不大于100 (<= 100)

示例(我需要validation的内容):

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) 

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

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

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

实例

尝试这个表达式: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演示http://jsfiddle.net/pCDVn/1/它正在工作……看看控制台

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

此外, 这是一个测试小提琴。 请注意,如果您真的关心validation“95”。 如果是假的,你将不得不为此添加额外的validation。 但是,我建议不要使用此要求,因为它仍然代表有效百分比,不会影响计算结果。