Javascript 验证isNaN,但允许空白

Javascript 验证isNaN,但允许空白,javascript,validation,Javascript,Validation,我正在尝试对用户输入执行一些客户端验证,以确保所有条目都是数字。(更具体地说,是两位数字加上小数。) 我理解这一部分,但我的问题是我是否使用ISNAN或编写正则表达式来检查格式,它将空白条目拾取无效。 这里是我的代码,你可以看到我尝试接受注释的空白字段的所有不同方法。它们都不起作用,它们都返回空格而不是数字 function validateData() { // var re = /^\s*?/; $( "input" ).each(function(inde

我正在尝试对用户输入执行一些客户端验证,以确保所有条目都是数字。(更具体地说,是两位数字加上小数。)

我理解这一部分,但我的问题是我是否使用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!");
            }; 
        });
    };  
试试这个

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:

我认为这里的问题在于您的正则表达式,请尝试使用以下
/[\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]

见此。

更改行
if(isNaN(parseFloat($(this).val())==false)
致:
if(isNaN(parseFloat($(this.val())===false | |$(this.val())===='')

我尝试了这个方法&它现在说空格可以,但它现在也允许字母和其他我不想允许的字符。这也奏效了。我发现我的问题在于我的浏览器。出于某种原因,我的验证没有捕获Chrome中的错误,但在所有其他浏览器中似乎都可以正常工作。感谢您的帮助:)验证现在允许空白,但它表示所有其他字母和字符也可以。。。我不知道为什么这么难,但我认为这是因为我正在收集表单中的所有数据&我在那里的某个地方搞砸了。你能给我一个失败的例子吗?我输入的任何字母都不会被认为是无效的。问题可能在我的代码中的其他地方吗?其他所有内容都是php&这是页面上唯一的js……请在控制台中查看它。e、 g.(+“abc”=“abc”)&&!isNaN(+“abc”)为false,因此逻辑应该有效。这解决了问题…除了Chrome之外,出于某种原因。它在IE和Firefox中工作得很好,但由于某些原因,如果我在Chrome中输入字母,它不会抛出错误(这可能一直都是这样,因为我没有在其他任何地方进行测试)但这对我来说是可行的,因为我也有一些HTML5验证&在Chrome中有效,但在IE中无效。你知道是什么原因导致这在Chrome中无效吗?我禁用了缓存…?这是我发现的。HTML5输入类型=“数字”验证在空白字段上失败,因此在它之后不会运行JavaScript验证。如果我去掉该属性,它运行良好。不过,我喜欢与数字一起使用的箭头和步长属性。有办法两者兼得吗?我是个新手。有人能告诉我为什么我的问题旁边现在有一个-1吗?谢谢你的演示。你的建议也奏效了。显然,我的问题是因为我有HTML5验证和jquery验证。HTML5验证首先运行&如果有什么东西失败了,它永远不会命中我的jquery验证。