Проверка JQuery - разрешить число без начального нуля?

Я использую проверку jquery (http://docs.jquery.com/Plugins/Validation) следующим образом:

    var $__field = $("#selector");  
    if ($__field.is(":visible")) {  
        $__field.rules('add', { required: true });
        $__field.rules('add', { number: true });
    } 

Если пользователь вводит число без начального нуля, например .5, то проверка jquery гласит: "Пожалуйста, введите действительный номер".

Как я могу изменить валидацию, чтобы разрешить ввод номера, не требуя начального нуля?

Ответы

Ответ 1

Проблема заключается в регулярном выражении, используемом для чисел. Рассматривая последнюю версию, строки 1021-1023, у нас есть:

number: function(value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
},

Проблема заключается в том, что этот первый фрагмент, который ищет ведущие отрицательные знаки и числа, индивидуально или в группах из трех разделенных запятыми, не является необязательным:

(?:\d+|\d{1,3}(?:,\d{3})+)

Устранение ? в конце сделает его необязательным:

(?:\d+|\d{1,3}(?:,\d{3})+)?

С помощью этого обновления вы можете либо изменить локальную копию плагина, изменив регулярное выражение на модифицированную версию, либо добавить метод проверки замещения на ваш javascript

jQuery.validator.addMethod("number", function(value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
}, "Please enter a valid number.");

На любой странице с этим вызовом addMethod метод проверки number будет переопределен для выполнения проверки числа, которая не требует начального нуля.

Ответ 2

Решение, включенное в jQuery Validation 1.14.0, заботится о ведущей нулевой проблеме, но оставляет главную проблему с отрицательными знаками. -.124 недействительно. -0.124. RegEx, предоставленный в публикации выше, кажется, позволяет -.124, поэтому я одобряю это решение в jQuery Validation 1.14.0