我正在研究一个简单的表格,我需要根据英国邮政编码进行验证。没问题,但我需要根据字符长度进行验证。用户只能输入邮政编码的前半部分(即SW1)或完整的邮政编码(即SW1 1AB)。
我认为最好的方法是检查KeyPress的长度,并针对半个邮政编码或整个事情验证RegEx。见下文:
jQuery('.ValPostCode').keyup(
function(){
if (jQuery(this).length < 5){
jQuery.validator.addMethod("ValPostCode", function(value, element) {
return this.optional(element) || /([A-PR-UWYZa-pr-uwyz]([0-9]{1,2}|([A-HK-Ya-hk-y][0-9]|[A-HK-Ya-hk-y][0-9]([0-9]|[ABEHMNPRV-Yabehmnprv-y]))|[0-9][A-HJKS-UWa-hjks-uw]))/.test(value);
}, "Please enter a valid postcode");
} else if (jQuery('.ValPostCode').length > 4) {
jQuery.validator.addMethod("ValPostCode", function(value, element) {
return this.optional(element) || /^(GIR\\s{0,1}0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\\s{0,1}[0-9][ABD-HJLNP-UW-Z]{2})$/.test(value);
}, "Please enter a valid postcode");
}
});
因此,如果.ValPostCode
的字符长度小于5,则仅验证英国邮政编码的前半部分,否则会检查完整有效的英国邮政编码。
有一次,我输出.ValPostCode
的长度,但它始终停在1(第一次按键),然后不再继续(即不会计入随后的按键)。
我希望我已经清楚地解释了自己,如果我不清楚,请告诉我。
我已经搜索过类似的问题,试图为自己解决这个问题,但我找不到任何东西。任何帮助表示赞赏!
答案 0 :(得分:3)
$(selector).length
(或jQuery(selector).length
)的长度始终是屏幕上与给定选择器匹配的元素数。尝试使用$(selector).val().length
获取表单元素的值并检查其长度。
答案 1 :(得分:1)
好像你在不必要地为每个按键设置验证器规则
首次加载页面时,您只需要调用以下内容:
jQuery.validator.addMethod("ValPostCode", function(value, element) {
if(value.length < 5) {
return (insert partial postcode check here);
} else {
return (insert whole postcode check here);
}
}, "Please enter a valid postcode");
应该只调用一次。 JQuery将根据其配置方式获取提交/更改时的错误。
因此不需要keyUp事件。
您遇到的主要问题(正如其他人已经指出的那样)是您返回jQuery对象的长度而不是其value属性的长度。