验证 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() === '')