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

Posted

技术标签:

【中文标题】使用jquery根据国家/地区验证邮政编码【英文标题】:using jquery to validate postal code based on country 【发布时间】:2011-11-17 00:29:30 【问题描述】:

在我们目前接受美国邮政编码的网站上工作。我已经有 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?(\d3)\D?\D?(\d3)\D?(\d4)/g,
            zip: /\d5$|^\d5-\d4/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;
            
        );

【问题讨论】:

通常,根据用户的语言环境,我会使用本地化来加载不同的资产。例如:用户访问网站。将语言选择设置为法语,将国家设置为加拿大。他们的文化现在是 fr_CA。我使用 fr 来加载法语内容,并使用 CA 来确定要使用哪种形式的地址验证。无论如何,这是我遇到的处理此类事情的最简单方法。 我同意 - 但现在这不是一个选项,因为客户不想实现语言环境。他们只想要网站上的一个位置,用户可以在其中选择一个国家并输入邮政编码。虽然 - 也许我应该只做一个“便宜”的版本 - 我可以让国家下拉菜单确定加载的 JS 文件。但我仍然想知道如何在 jquery 中做到这一点,以便我知道将来如何做到这一点。 【参考方案1】:

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

验证函数 针对所有其他国家/地区的对象 默认规则对象
   validation = 
      validate : function( sCountryName, sToValidate )
        return ( null != sToValidate.match( this.countries[ sCountryName ] ? this.countries[ sCountryName ].zip : this.defaultRules.zip ))
      ,

      countries : 
        england : 
          zip : /\d5$|^\d5-\d4/g
        
      ,
      defaultRules : 
        zip : /\d5$|^\d5-\d4/g
      
    

【讨论】:

感谢您的建议。我会将您的代码放入规则中:我在原始帖子中发布的部分吗?主要是第3行,return (......) ? 这取决于你想如何调用函数,因为你没有包含你的代码的那部分,只是正则表达式。您可以在代码中将“规则”对象重命名为“defaultRules”,然后从我的代码中添加“国家”对象,并从我的代码中添加“验证”功能。使用 $.fn.validate.validation("england", "213123") 你应该得到你的结果。 对此感到抱歉 - 我已经编辑了原始帖子以包括如何调用验证。谢谢 如果您希望我为您修改该函数,您还需要包含该函数的其余部分 ($.fn.validate)。 对不起 - 我不是想变得困难。我只是想避免用额外的代码弄乱页面。我已经编辑了我的原始帖子以包含完整的功能。

以上是关于使用jquery根据国家/地区验证邮政编码的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中的地址验证

国家/城市/州验证

如何使用谷歌地图 API 获取阿联酋国家/地区的邮政编码区域?

如何防止在 WooCommerce 中的某些国家/地区隐藏邮政编码/邮政编码字段

根据国家/地区操作 <p> 文本

如何使用意图和活动在 Xamarin Android 中插入城市、街道、邮政编码、国家/地区的联系人?