2010-12-09 14 views
1

Ich habe eine jQuery Validierung regex, die, wenn Ausdruck überprüft (en) sind im Preis inbegriffen:jQuery Validierung regex: mehrere Regelprüfungen, gleiche Feld

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

Wenn ich mehrere Sätze haben zu überprüfen, ich hinzufüge, sie mit :

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

Das Problem ist, ich habe, dass es Kontrollen für den letzten Satz der Regel nur, wenn „Test Begriff“ Bedeutung enthalten ist, aber die anderen sind nicht, es wird es akzeptieren. Ich muss es überprüfen, um sicherzustellen, dass alle Sätze enthalten sind.

Ich möchte auch, dass die Fehlermeldung der Lage sein, um die Phase enthalten, die, beispielsweise fehlt, wenn „eine andere Phrase“ fehlt, wird der Fehler sein:

You must include the required phrase: another phrase

Thx

Antwort

1

Sie sollten machen eine Methode speziell für die Anforderung, anstatt für die generische Regex gehen:

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); 
}); 

Dieser Ihre Eingabe erfordert ein Namensattribut zu haben, und Sie müssen einen Verweis auf speichern th Das Validator-Objekt (vInstance), wenn es erstellt wird. Es ist der beste Hack, den ich mir vorstellen kann, nachdem ich die API von jQuery validator gesehen habe. IMO, eine anständige Validierung Plugin sollten Sie eine benutzerdefinierte Fehlermeldung aus der benutzerdefinierten Funktion lassen Rückkehr ...

Verwenden Sie es wie folgt:

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

Ich denke, ich werde es versuchen, da es keine besseren Antworten gibt. Danke – Ricky

+0

Ich bekomme den Fehler: "Warnung: Keine Nachricht für article_text definiert". Irgendwelche Ideen? – Ricky

+0

Klingt wie das Plugin möchte, dass Sie eine bestimmte Fehlermeldung für die Methode eingeben. Ich könnte mich irren, aber es sieht so aus, als wäre das Plugin nicht flexibel genug, um dynamische Fehlermeldungen zuzulassen.Was Sie versuchen können, ist, eine Nachricht nach der Funktion in 'addMethod' hinzuzufügen, wie Sie es für die Regex getan haben (das wird die Warnmeldung los), aber meine Vermutung ist, dass sie die überschreiben wird, die ich versuchte einzufügen –

0

benutzte ich Box9 Antwort, und das Problem behoben ihm und Ricky waren mit etwa der Nachricht wird mit überschrieben „Warnung: Keine Nachricht definiert für ...“ So ist die vollständige und funktionierende Lösung sein würde:

Zitiert Box9:

Sie sollen eine Methode speziell für die Anforderung machen , Anstatt für die generische Regex gehen:

$("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); 
}); 

Statt den Fehler selbst zu zeigen, wie Box9 zunächst mit errors() vorgeschlagen, müssen Sie es als Standard-Nachricht für diese Validierung gesetzt, weil jQuery.validation Plugin Suchen Sie nach dem Standardwert, und überschreiben Sie alle vorherigen Fehler, die für dieses Element angezeigt werden.

Zitiert Box9 wieder:

Dieser Ihre Eingabe erfordert ein Namensattribut zu haben.

es wie so verwenden:

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

Danke Box9 und Ricky hierfür zunächst veröffentlichen, da es mir die Lösung finden geholfen.