0

我正在制作一个简单的表格,我需要根据英国邮政编码进行验证。没问题,但我需要根据字符长度进行验证。用户可以只输入邮政编码的前半部分(即 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");
        }

    });

因此,如果 char 的长度.ValPostCode小于 5,则它仅验证英国邮政编码的前半部分,否则它会检查完整且有效的英国邮政编码。

有一次我在输出长度,.ValPostCode但它总是停在 1(第一次按键),然后不再继续(即不会随着后续按键计数)。

我希望我已经足够清楚地解释了自己,如果我不清楚,请告诉我。

我已经搜索了类似的问题来尝试为自己解决这个问题,但我找不到任何东西。任何帮助表示赞赏!

4

2 回答 2

3

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

于 2012-10-30T17:06:01.153 回答
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 属性的长度。

于 2012-10-30T17:15:26.250 回答