JavaScript/jQuery-基于长度的验证

JavaScript/jQuery-基于长度的验证,javascript,jquery,regex,Javascript,Jquery,Regex,我正在开发一个简单的表单,需要根据英国邮政编码进行验证。没有问题,但我需要根据字符长度进行验证。用户只能输入前半个邮政编码(即SW1)或完整的邮政编码(即SW1 1AB) 我认为最好的方法是在键盘上检查长度,并根据RegEx验证半个邮政编码或整个内容。见下文: jQuery('.ValPostCode').keyup( function(){ if (jQuery(this).length < 5){ jQuery.validator.ad

我正在开发一个简单的表单,需要根据英国邮政编码进行验证。没有问题,但我需要根据字符长度进行验证。用户只能输入前半个邮政编码(即SW1)或完整的邮政编码(即SW1 1AB)

我认为最好的方法是在键盘上检查长度,并根据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");
        }

    });
jQuery('.ValPostCode').keyup(
函数(){
if(jQuery(this).length<5){
jQuery.validator.addMethod(“ValPostCode”),函数(值,元素){
返回此。可选(元素)|/([A-PR-UWYZa-PR-uwyz]([0-9]{1,2}|)([A-HK-Ya-HK-y][0-9]|[A-HK-Ya-HK-y][0-9]|[ABEHMNPRV-Yabehmnprv-y]))|[0-9][A-HJKS-UWa HJKS-uw])/。测试(值);
},“请输入有效的邮政编码”);
}else if(jQuery('.ValPostCode')。长度>4){
jQuery.validator.addMethod(“ValPostCode”),函数(值,元素){
返回此.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测试值;
},“请输入有效的邮政编码”);
}
});
因此,如果
.ValPostCode
的字符长度小于5,则只验证英国邮政编码的前半部分,否则将检查完整有效的英国邮政编码

有一次,我输出了
.ValPostCode
的长度,但它总是在1(第一次按键)处停止,然后就不再继续了(也就是说,在随后的按键操作中不会计数)

我希望我已经解释清楚了,如果我不清楚,请告诉我


我已经搜索了类似的问题,试图为自己解决这个问题,但我找不到任何东西。感谢您的帮助

长度
$(选择器)。长度
(或
jQuery(选择器)。长度
)始终是屏幕上与给定选择器匹配的元素数。尝试使用
$(选择器).val().length
获取表单元素的值,并检查其长度。

长度
$(选择器)。length
(或
jQuery(选择器)。length
)始终是屏幕上与给定选择器匹配的元素数。尝试使用
$(selector).val().length
获取表单元素的值,并检查其长度。

似乎在不必要地对每个按键设置验证程序规则

当页面首次加载时,您应该只需要调用如下内容:

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.validator.addMethod(“ValPostCode”),函数(值,元素){
如果(值。长度<5){
返回(在此处插入部分邮政编码检查);
}否则{
返回(在此处插入完整的邮政编码检查);
}
},“请输入有效的邮政编码”);
应该只打一次电话。JQuery将根据配置方式在提交/更改时发现错误

因此,不需要密钥更新事件


您遇到的主要问题(正如其他人已经指出的)是,您返回的是jQuery对象的长度,而不是其值属性的长度。

似乎您在不必要地对每个按键设置验证器规则

当页面首次加载时,您应该只需要调用如下内容:

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.validator.addMethod(“ValPostCode”),函数(值,元素){
如果(值。长度<5){
返回(在此处插入部分邮政编码检查);
}否则{
返回(在此处插入完整的邮政编码检查);
}
},“请输入有效的邮政编码”);
应该只打一次电话。JQuery将根据配置方式在提交/更改时发现错误

因此,不需要密钥更新事件


您遇到的主要问题(正如其他人已经指出的)是,您返回的是jQuery对象的长度,而不是其值属性的长度。

为此,我将重新编写代码以删除按键。为此,我将重新编写代码以删除按键。