使用jquery根据国家/地区验证邮政编码

时间:2011-11-17 00:29:30

标签: jquery-validate postal-code

在我们目前接受美国邮政编码的网站上工作。我已经有jquery验证工作。我现在要做的是添加一个下拉列表供用户选择国家/地区,然后根据他们选择的国家/地区,它将验证邮政编码以确保其匹配。

有人可以给我一些关于如何做到这一点的指示吗?基本上,我只需要根据国家/地区下拉更改验证程序功能正在使用的正则表达式。 (我假设的)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语句来设置正则表达式。

感谢您提前寻求帮助。

编辑:这是实际调用验证的代码

   <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 :(得分:0)

我会创建一个对象,女巫有:

  • 验证功能
  • 所有其他国家/地区的对象
  • 默认规则对象
   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
      }
    }