JavaScript / jQuery - 根据长度进行验证

时间:2012-10-30 17:02:05

标签: javascript jquery regex

我正在研究一个简单的表格,我需要根据英国邮政编码进行验证。没问题,但我需要根据字符长度进行验证。用户只能输入邮政编码的前半部分(即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(第一次按键),然后不再继续(即不会计入随后的按键)。

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

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

2 个答案:

答案 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属性的长度。