我正在尝试对用户输入执行一些客户端验证,以确保所有条目都是数字。 (更具体地说,2位数加十进制。)
我理解那部分,但我的问题是我是使用isNaN还是编写正则表达式来检查格式,它将空白条目视为无效。
这是我的代码,您可以看到我尝试接受注释掉的空白字段的所有不同方法。它们都不起作用,它们都返回空白而不是数字......
function validateData() {
// var re = /^\s*?/;
$( "input" ).each(function(index) {
if(isNaN(parseFloat($(this).val())) === false) {
console.log("Field " + index + " is ok");
// }else if
// ((($(this).val()).trim()) == "" ) {
// console.log("Field " + index + " is ok");
// console.log($(this).val());
// } else if
// (re.test($(this).val())) {
// } else if
// (($(this).val()).trim().isEmpty()) {
// } else if
// ((parseFloat($(this).val())).trim().isEmpty()) {
// } else if
// (($(this).text()) === "") {
// console.log("Field " + index + " is ok");
} else {
$("#messages").html("Please enter only numbers");
console.log("Field " + index + " is not a number!");
};
});
};
答案 0 :(得分:0)
试试这个
var value = $(this).val();
if((+value == value) && !isNaN(+value)){
//Yey we have a valid number.
}
这可能是我发现的松散等式运算符的少数有效用法之一(它防止null和""传入)。它使用一元加运算符加上一点点魔法,它是检查值是否为数字的一种很好的简短方法。
您的代码现在应该如下所示:
function validateData() {
$( "input" ).each(function(index) {
var value = $(this).val();
if((+value == value) && !isNaN(+value)){
//The value is a valid number
} else {
//The value is NOT a valid number
}
});
};
答案 1 :(得分:0)
我认为这里的问题与您的正则表达式有关,请尝试使用以下/[\d\s]+/
:
$( "input" ).each(function(index) {
var patt = new RegExp("/[\d\s]+/");
var res = patt.test($(this).val());
if(res){
console.log("Field " + index + " is ok");
}else{
console.log("Field " + index + " is not ok");
}
})
\ d匹配数字[0-9]
\ s匹配任何空白字符[\ r \ n \ t \ f]
请参阅此DEMO。
答案 2 :(得分:0)
更改行
if(isNaN(parseFloat($(this).val())) === false)
至:
if(isNaN(parseFloat($(this).val())) === false || $(this).val() === '')