использование jquery для проверки почтового индекса в зависимости от страны - PullRequest
2 голосов
/ 17 ноября 2011

Работа на сайте, где мы в настоящее время принимаем почтовые индексы США. У меня уже есть jquery validate для этого. Теперь я хочу добавить выпадающий список, чтобы пользователь мог выбрать страну, а затем, основываясь на выбранной стране, он проверит почтовый индекс, чтобы убедиться, что он совпадает.

Может кто-нибудь дать мне несколько советов о том, как я могу это сделать? По сути, мне просто нужно изменить регулярное выражение, которое использует функция валидатора, в зависимости от выпадающего списка стран. (Что я предполагаю, что) соответствующий раздел функции проверки JQuery это:

(function ($) {
$.fn.validate = function (options) {
    var defaults = {
        invalidClass: 'error',
        rules: {
            req: /.{1,}/g,
            email: /[\w\.=-]+@[\w\.-]+\.[\w]{2,3}/g,
            phone: /\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})/g,
            zip: /\d{5}$|^\d{5}-\d{4}/g,
            //password: /^(?=.*\d)(?=.*[a-zA-Z]).{8,20}$/g,
            password: /^(?=.{8,20}$)(?=.*\d)(?=.*[a-zA-Z]).*/g,
            //nospecialchars: /[^<>?,\/\\\[\]\{\}\|!@#$%^&*()_+;:"]{1,}/g
            nospecialchars: /^(?!.*[?<>;]).+$/g
        },
        error_messages: {
            req: 'Oops..',
            email: 'Please enter your email address.',
            phone: '',
            zip: 'Please give me a valid zip.',
            max: 'too many characters.',
            password: '',
            nospecialchars: ''
        },
        success: null,
        failure: null
    },
    errors = [],
    opts = $.extend(true, defaults, options);

    return this.each(function () {
        var $this = $(this);

        $(this).find('input[type="submit"]:not(.cancel), button').click(function () {
            errors = [];
            validate_fields($this);

            if ($this.find('.error').length === 0) {
                if (typeof opts.success == 'function')
                    return opts.success();
            }
            else {
                if (typeof opts.failure == 'function')
                    return opts.failure(errors);
            }
        });
    });

Я не очень знаком с jquery, поэтому я не знаю, какой здесь синтаксис для меня, чтобы создать оператор if-else или case для установки регулярного выражения.

Спасибо, если заранее за любую помощь.

edit: Вот фрагмент кода, который фактически вызывает проверку

   <script type="text/javascript">
    $(function () {
        setForm();

        $('form').validate({
            error_messages: {
                req: null
            },
            failure: function (errors) {
                var sel = '';

                $(".errMsg").hide();
                for (x in errors) {
                    sel += ',#' + errors[x][0];
                }

                if (sel.length > 0) {
                    sel = sel.substring(1);

                    $(sel).parent().find(".errMsg").show(0, function () {
                        $('#home .orange_box, #home .HomeRight').height('auto');
                        $('#infov .white_box, #infov .orangeRight').height('auto');
                        $('#findt .orange_box, #findt .HomeRight').height('auto');

                        if ($.browser.msie && $.browser.version == 8) {
                            evenColumns('#home .orange_box', '#home .HomeRight', -16);
                            evenColumns('#infov .white_box', '#infov .orangeRight', -16);
                            evenColumns('#findt .orange_box', '#findt .HomeRight', -16);
                        }
                        else {
                            evenColumns('#home .orange_box', '#home .HomeRight', -15);
                            evenColumns('#infov .white_box', '#infoforv .orangeRight', -15);
                            evenColumns('#findt .orange_box', '#findt .HomeRight', -15);
                        }
                    });
                }

                return false;
            },
            success: function () {
                $(".errMsg").hide();
                return true;
            }
        });

1 Ответ

0 голосов
/ 17 ноября 2011

Я бы создал объект, у которого есть:

  • функция для проверки
  • объект для всех других стран
  • объект для правил по умолчанию
   validation = {
      validate : function( sCountryName, sToValidate ){
        return ( null != sToValidate.match( this.countries[ sCountryName ] ? this.countries[ sCountryName ].zip : this.defaultRules.zip ))
      },

      countries : {
        england : {
          zip : /\d{5}$|^\d{5}-\d{4}/g
        }
      },
      defaultRules : {
        zip : /\d{5}$|^\d{5}-\d{4}/g
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...