验证isNaN但允许空白

时间:2015-01-26 13:32:04

标签: javascript validation

我正在尝试对用户输入执行一些客户端验证,以确保所有条目都是数字。 (更具体地说,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!");
            }; 
        });
    };  

3 个答案:

答案 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
            }
        });
    };

JS小提琴:http://jsfiddle.net/o8zjpfzx/2/

答案 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() === '')