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