2013-01-22 176 views
0

我正在項目上使用UF Validator,我想添加一些自定義驗證檢查。JQuery:試圖添加自定義驗證用友驗證器

我想添加一個用戶名檢查,如果輸入包含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; 
    }); 

也存在相應的錯誤信息,但我不認爲他們需要顯示。

我認爲這樣做可以正常工作,但是當我嘗試時,它的表現很奇怪。顯示錯誤的錯誤消息,而不是驗證它是如何得到的。我檢查了他們的網站並在這裏搜索,但找不到與之相關的任何內容。

回答

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]

+0

明白了,謝謝! – Adam