2015-01-26 2 views
-1

Я пытаюсь выполнить некоторую проверку на стороне клиента при вводе пользователя, чтобы убедиться, что все записи являются числами. (Более конкретно, 2 цифры плюс десятичные числа.)Подтвердить isNaN, но разрешить пробелы

Я понимаю эту часть, но моя проблема заключается в том, использую ли я 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

Вот что я узнал. Подтверждение ввода типа HTML5 = «число» не выполняется в пустых полях, поэтому после него не будет выполняться проверка javascript. Если я выберу этот атрибут, он будет работать нормально. Однако мне нравится атрибут arrows & step, который совпадает с номером. Есть ли способ иметь и то и другое? – heat222

+0

Я новичок в stackoverflow. Может кто-нибудь сказать мне, почему теперь рядом с моим вопросом? – heat222

ответ

0

Попробуйте

var value = $(this).val(); 
if((+value == value) && !isNaN(+value)){ 
    //Yey we have a valid number. 
} 

Это, вероятно, одна из немногих действительных использований рыхлого оператора равенства я нашел (он защищает от нулевого и «« передается »). Он использует унарный плюс оператора плюс немного магии, и это хороший короткий способ проверить, является ли значение числом или нет.

Ваш код теперь должен выглядеть следующим образом:

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/

+0

Теперь проверка позволяет использовать пробелы, но в ней говорится, что все остальные буквы и символы тоже в порядке ... Я не уверен, почему это так сложно, но я думаю, что это потому, что я собираю все данные из формы с каждой И я возился где-то там. – heat222

+0

Можете ли вы привести мне пример того, что не удается? – Magrangs

+0

Любые буквы, которые я вводил, не попадают как недопустимые. Может ли проблема быть в другом месте моего кода? Все остальное находится в php, и это единственный js на странице .... – heat222

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 матч любой символ пробела [\ г \ п \ т \ е]

Смотрите эту DEMO.

+0

Спасибо за демонстрацию. Ваше предложение тоже работало. По-видимому, моя проблема в том, что у меня есть проверка HTML5 и проверка jquery. Проверка HTML5 выполняется сначала, и если что-то не удается, оно никогда не удаляет мою проверку jquery. – heat222

0

Изменение линии if(isNaN(parseFloat($(this).val())) === false) к: if(isNaN(parseFloat($(this).val())) === false || $(this).val() === '')

+0

Я попробовал это, и теперь он говорит, что пробелы пробелов в порядке, но теперь он также позволяет использовать буквы и другие символы, которые я не хочу разрешать. – heat222

+0

Это тоже сработало. Я обнаружил, что моя проблема лежит в моем браузере. По какой-то причине моя проверка не вызывает ошибок в Chrome, но, похоже, работает во всех других браузерах. Спасибо за помощь :) – heat222