我正在验证百分比值:
validateFloatValue: function(value) {
var number = parseFloat(value);
if (isNaN(number)) {
console.log("Invalid value");
}
}
基本上,值以字符串形式传递。它通过" 33.45"这很好。但是,我不想让用户输入" 33.45%"。但是,在这种情况下," 33.45%"没有错误。因为parseFloat正在转换" 33.45%"至33.45 parseFloat("33.45")
。如果值为" 33.45%"?
答案 0 :(得分:2)
您最终可以排除所有与正则表达式不匹配的内容...例如value
不匹配\d[.,]+\d
您应该编写符合您需求的正则表达式;)
(function validateFloatValue(value) {
var number = parseFloat(value);
if (! /^\d+[., ]+\d+$/.test(value) || isNaN(number)) {
document.getElementById('res').innerHTML = "Invalid value";
}
})("12.34%");
<div id=res></div>
答案 1 :(得分:0)
Number.isFinite
稍微更严格地验证输入:
validateFloatValue: function(value) {
if (!Number.isFinite(number)) {
console.log("Invalid value");
}
}
您也可以直接使用isNaN
- 它会更便携:
validateFloatValue: function(value) {
if (isNaN(number)) {
console.log("Invalid value");
}
}
答案 2 :(得分:0)
如果您只检查字符串是否包含%,则可以像这样使用indexOf。
if (value.indexOf('%') === -1) {
} else {
console.log("Invalid value");
}
如果要检查字符串是否为数字,可以尝试使用数字函数将字符串转换为数字。
如果该值无法转换为合法号码,则返回NaN(非数字)。
所以你只需要使用isNaN函数验证结果是否为NaN:
var valueNumber = Number(value);
if (!isNaN(valueNumber)) {
} else {
console.log("Invalid value");
}