2010-12-09 67 views
1

我有檢查,如果警語都包含一個jQuery驗證的正則表達式:jQuery驗證的正則表達式:多個規則檢查,同場

$.validator.addMethod("regex", function(value, element, regexp) { 
    return this.optional(element) || regexp.test(value); 
}, "You must include the required keyword phrase(s)."); 

如果我有多個短語來檢查,我與他們加入:

$("#text").rules("add", { regex: /phrase one/i }); 
$("#text").rules("add", { regex: /another phrase/i }); 
$("#text").rules("add", { regex: /test phrase/i }); 

我遇到的問題是,它只是檢查最後一句規則,如果「測試短語」包括,但有些則沒有意義,它會接受它。我需要它來檢查以確保包含所有短語。

我也想了錯誤信息,以便能夠以包括缺少的階段,例如,如果「另一個短語」缺失,錯誤將是:

You must include the required phrase: another phrase

THX

回答

1

你應該做方法特定的要求,而不是去爲通用正則表達式:

var vInstance = $("form").validator(/* options */); 

$.validator.addMethod("multiPhrases", function (value, element, phrases) { 
    var missingPhrase, errObject = {}; 

    // Check for all the phrases 
    for (var i = 0; i < phrases.length; i++) { 
     if (value.toLowerCase().indexOf(phrases[i].toLowerCase()) < 0) { 
     // Phrase not found 
     missingPhrase = phrases[i]; 
     break; 
     } 
    } 

    // Show the error yourself 
    if (missingPhrase) { 
     errObject[$(element).attr("name")] = 
     "You must include the required phrase: " + 
     missingPhrase; 
     vInstance.showErrors(errObject); 
    } 

    // Tell the plugin if there was an error 
    return (missingPhrase == false); 
}); 

這需要您輸入有一個name屬性,你需要保存一個參考TH驗證器對象(vInstance)。在查看jQuery驗證器的API之後,這是我能想到的最好的黑客技巧。 IMO,一個體面的驗證插件應該讓你從自定義函數返回一個自定義錯誤消息...

使用它,像這樣:

$("#text").rules("add", {multiPhrases: [ 
    "phrase one", 
    "another phrase", 
    "test phrase" 
]}); 
+0

我想我會試試這個,因爲沒有更好的答案。謝謝 – Ricky 2010-12-09 18:24:09

0

我用BOX9答案,並解決了問題他和Ricky是有關於該消息的被覆蓋以「警告:沒有定義消息......」 那麼完整和工作的解決辦法是這樣的:

報價BOX9:

您應作出具體的規定的方法,而不是去爲通用正則表達式:

$("form").validator(/* options */); 

$.validator.addMethod("multiPhrases", function (value, element, phrases) { 
    var missingPhrase, errObject = {}; 

    // Check for all the phrases 
    for (var i = 0; i < phrases.length; i++) { 
    if (value.toLowerCase().indexOf(phrases[i].toLowerCase()) < 0) { 
     // Phrase not found 
     missingPhrase = phrases[i]; 
     break; 
    } 
    } 

    // Set the message as default for this validation 
    if (missingPhrase) { 
    errObject["multiPhrases"] = 
     "You must include the required phrase: " + missingPhrase; 
    jQuery.extend(jQuery.validator.messages, errObject); 
    } 

    // Tell the plugin if there was an error 
    return (missingPhrase == false); 
}); 

而不是顯示自己的錯誤,因爲BOX9最初提出了showErrors(),您必須將其作爲此驗證默認的消息,因爲jQuery.validation插件會無論如何都要查找默認值,並覆蓋此元素顯示的任何以前的錯誤。

再次引用BOX9:

這需要您輸入有一個name屬性。

使用它,像這樣:

$("#text").rules("add", {multiPhrases: [ 
    "phrase one", 
    "another phrase", 
    "test phrase" 
]}); 

謝謝Box9Ricky的最初發布這個,因爲它幫我找到了解決辦法。