JQuery:尝试向UF Validator添加自定义验证

时间:2013-01-22 18:07:04

标签: jquery regex validation

我在项目中使用UF Validator,我想添加一些自定义验证检查。

我想添加一个用户名检查,如果输入包含除a-z 0-9以外的任何内容,则会给出错误。没有空格或任何东西。同样,我想添加一个只允许a-z但允许空格的名称检查。

我的检查基于内置的电子邮件验证。这是过滤器:

var mail_filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

以下是电子邮件检查的代码:

// E-MAIL VALIDATION
    if (obj.hasClass('req-email')) {
        tmpresult = mail_filter.test(valAttr);
        if (!tmpresult) errorTxt = (valAttr == '') ? opts.errorMsg.reqMailEmpty : opts.errorMsg.reqMailNotValid;
        result = result && tmpresult;
    }

这是我的过滤器:

var username_filter = /^[a-zA-Z0-9]/;
var name_filter = /^[a-zA-Z ]/;

这是我的代码:

// USERNAME VALIDATION
    if (obj.hasClass('req-username')) {
        tmpresult = username_filter.test(valAttr);
        if (!tmpresult) errorTxt = (valAttr == '') ? opts.errorMsg.reqUsernameEmpty : opts.errorMsg.reqUsernameNotValid;
        result = result && tmpresult;
    }
// NAME VALIDATION
    if (obj.hasClass('req-name')) {
        tmpresult = name_filter.test(valAttr);
        if (!tmpresult) errorTxt = (valAttr == '') ? opts.errorMsg.reqNameEmpty : opts.errorMsg.reqNameNotValid;
        result = result && tmpresult;
    }

我也在这里引用过它们:

// gather inputs & check is valid
    $(merged_options.scope+' .req-email, '+merged_options.scope+' .req-string, '+merged_options.scope+' .req-same, '+merged_options.scope+' .req-both, '+merged_options.scope+' .req-numeric, '+merged_options.scope+' .req-date, '+merged_options.scope+' .req-min, '+merged_options.scope+' .req-username, '+merged_options.scope+' .req-name').each(function() {
        thisValid = $.formValidator.validate($(this),merged_options);
        boolValid = boolValid && thisValid.error;
        if (!thisValid.error) errorMsg  = thisValid.message;
    });

也存在相应的错误消息,但我认为他们不需要显示。

我认为这样可以正常工作,但是当我尝试时,它表现得非常奇怪。显示错误的错误消息,而不是验证它我想要的方式。我已经检查了他们的网站并在这里进行了搜索,但找不到与之相关的任何内容。

1 个答案:

答案 0 :(得分:0)

您的正则表达式仅测试字符串开头是否存在单个字符 您需要添加+以表示您要匹配一个或多个字符,例如[a-z\d]+,或者您可以指定范围。

例如,下面的正则表达式指定字符串长度必须介于1到20个字符之间。

var username_filter = /^[a-z\d]{1,20}$/i;
var name_filter = /^[a-z ]{1,20}$/i; 

需要结束字符$,或者您只指定字符串开头必须包含的内容。

i标志表示不区分大小写的匹配,假设这是您想要的; \d相当于[0-9]