使用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根据国家/地区验证邮政编码的主要内容,如果未能解决你的问题,请参考以下文章
如何使用谷歌地图 API 获取阿联酋国家/地区的邮政编码区域?