Jquery Плагин валидации, работающий в Chrome, но не в Mozilla - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть форма в приложении Django, проверка которой отлично работает на Chrome, но я не могу заставить ее работать на Mozilla. Я загружаю эту версию jquery и jquery плагин проверки

<script src="//ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.19.1/jquery.validate.js"></script>
<script src="https://ajax.microsoft.com/ajax/jquery.validate/1.19.1/additional-methods.js"></script>

Мой jquery код проверки выглядит следующим образом:

jQuery.validator.addMethod("phoneValidator", function(value, element) {
  return this.optional(element) || /^\+?\d?\(?([\d]{3}?)\)?-?([\d]{3}?)-?([\d]{4,5})$/.test(value);
}, 'Please enter a valid phone number. E.g. 123-456-7890');

jQuery.validator.addMethod("zipValidator", function(value, element) {
  return this.optional(element) || /(?i)^[a-z0-9][a-z0-9\- ]{0,10}[a-z0-9]$/.test(value);
}, 'Please enter a valid zip code. E.g. 80111 or 1234-80111');

jQuery.validator.addMethod("dateValidator", function(value, element) {
  return this.optional(element) || /^(0[1-9]|1[0-2])[\/|-](0[1-9]|1\d|2\d|3[01])[\/|-]([1-9]\d{3})$/.test(value);
}, jQuery.validator.format('Please enter a valid date in mm/dd/yyyy format.'));

jQuery.validator.addMethod("dateNotInFutureValidator", function(value, element) {
  //replace all dashes with /
  value = value.replace(/-/g, '\/');
  value = value.split('/');
  var today = new Date();
  var month = today.getMonth() + 1; //getMonth is 0-indexed
  var day = today.getDate();
  var year = today.getFullYear();
  // console.log(month, day, year);
  // console.log(value[0], value[1], value[2]);
  return this.optional(element) || (value[2] == year && value[0] == month && value[1] <= day) || (value[2] == year && value[0] < month) || (value[2] < year);
}, jQuery.validator.format('Please enter a date that is not in the future.'));

jQuery.validator.addMethod("allChars", function(value, element) {
  return this.optional(element) || /[a-zA-Z]+$/.test(value);
}, 'This field may only contain characters.');

jQuery.validator.addMethod("allHebrew", function(value, element) {
  return this.optional(element) || /^[\u0590-\u05FF]+$/.test(value);
}, 'This field may only contain Hebrew characters.');

FORM_RULES = {
    verify_email: { equalTo: '#id_email' },
    '{{soldier.date_of_birth.name }}' : {'dateValidator': true, 'dateNotInFutureValidator':true},
    '{{soldier.legal_first_name.name}}' : 'allChars',
    '{{soldier.legal_last_name.name}}' : 'allChars',
    '{{soldier.naaleh_selah_choice.name}}' : {
        required: function(element){
            return $('#id_naaleh_selah_bool_0').val() == 1
        }},
    accept_checkbox: {required: true}
};

FORM_MESSAGES = {
    verify_email: {equalTo: 'Please enter the same value as the Email field.'},
    accept_checkbox: {required: 'You must accept the terms and conditions to continue.'}
};


    $('#intake_form').validate({
        rules: FORM_RULES,
        messages: FORM_MESSAGES,
        errorPlacement: function(error, element)
        {

            if ( element.is(":radio"))
            {
                error.insertAfter( element.parent().parent().parent() );
            }
            else if (element.attr("id") === "accept_checkbox")
            {
                error.insertAfter(element.parent());
            }
            else { // This is the default behavior of the script
                error.insertAfter( element );
            }
        }
    });

Ни одно из сообщений проверки не отображается для меня на Mozilla Firefox, и это позволяет мне отправить форму без заполнения обязательных полей. Я вижу следующую ошибку в консоли на Mozilla:

SyntaxError: invalid regexp group

, но я не уверен, что с ней делать, так как в ней говорится, что ошибка составляет 1: 1: 1 - пустая строка в html исходный код страницы.
Я где-то читал, что синтаксис lookbehind regex не поддерживается в Firefox, а плагин проверки jquery разрешает использование регулярных выражений, так что, может быть, эти два несовместимы? Есть ли способ исправить это?

1 Ответ

0 голосов
/ 09 февраля 2020

Проблема заключалась в том, что мой zipValidator (второй вызов метода в опубликованном коде проверки) имел регулярное выражение, которое Firefox считалось недействительным. Другие браузеры поддерживают нотацию (?i) (без учета регистра), но Firefox - нет. После того, как я изменил это регулярное выражение (просто добавил AZ после каждого az), все проверки, показ и скрытие с jquery работают.

...