验证 isNaN 但允许空白
Validate isNaN but allow blanks
我正在尝试对用户输入执行一些客户端验证,以确保所有条目都是数字。 (更具体地说,2 位数字加小数点。)
我明白那部分,但我的问题是无论我使用 isNaN 还是编写正则表达式来检查格式,它都会将空白条目视为无效。
这是我的代码,您可以看到我尝试接受被注释掉的空白字段的所有不同方法。 None 他们工作,他们都 return 空白,因为不是数字...
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!");
};
});
};
试试这个
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
}
});
};
JS Fiddle: http://jsfiddle.net/o8zjpfzx/2/
我认为问题出在你的正则表达式上,尝试使用以下 /[\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 match a digit [0-9]
\s match any white space character [\r\n\t\f ]
看到这个DEMO。
换行
if(isNaN(parseFloat($(this).val())) === false)
到:
if(isNaN(parseFloat($(this).val())) === false || $(this).val() === '')
我正在尝试对用户输入执行一些客户端验证,以确保所有条目都是数字。 (更具体地说,2 位数字加小数点。)
我明白那部分,但我的问题是无论我使用 isNaN 还是编写正则表达式来检查格式,它都会将空白条目视为无效。
这是我的代码,您可以看到我尝试接受被注释掉的空白字段的所有不同方法。 None 他们工作,他们都 return 空白,因为不是数字...
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!");
};
});
};
试试这个
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
}
});
};
JS Fiddle: http://jsfiddle.net/o8zjpfzx/2/
我认为问题出在你的正则表达式上,尝试使用以下 /[\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 match a digit [0-9]
\s match any white space character [\r\n\t\f ]
看到这个DEMO。
换行
if(isNaN(parseFloat($(this).val())) === false)
到:
if(isNaN(parseFloat($(this).val())) === false || $(this).val() === '')