2010-12-09 15 views
1

J'ai un regex de validation jQuery qui vérifie si Phrase (s) sont inclus:validation jQuery regex: plusieurs contrôles de règles, même domaine

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

Si j'ai plusieurs phrases pour vérifier, je les ajouter avec :

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

le problème que je vais avoir est qu'il vérifie uniquement la dernière règle de phrase, ce qui signifie si « phrase de test » est inclus, mais les autres ne sont pas, il va l'accepter. J'en ai besoin pour vérifier que toutes les phrases sont incluses.

Je voudrais aussi que le message d'erreur pour être en mesure d'inclure la phase qui manque, par exemple, si « une autre phrase » est manquante, l'erreur sera:

You must include the required phrase: another phrase

Thx

Répondre

1

Vous devriez faire spécifique de la méthode à l'exigence, plutôt que d'aller pour le générique regex:

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

Cela nécessite votre entrée d'avoir un attribut de nom, et vous devez enregistrer une référence à th e objet validateur (vInstance) lors de sa création. C'est le meilleur hack que je puisse penser après avoir regardé l'API de jQuery validator. OMI, un plugin de validation décent devrait vous permettre de renvoyer un message d'erreur personnalisé de la fonction personnalisée ...

Utilisez comme si:

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

Je suppose que je vais essayer car il n'y a pas de meilleures réponses. Merci – Ricky

+0

Je reçois l'erreur: "Attention: aucun message défini pour article_text". Des idées? – Ricky

+0

Semble comme le plugin veut que vous mettiez un message d'erreur spécifique dans la méthode. Je peux me tromper, mais il semble que le plugin ne soit pas assez flexible pour permettre des messages d'erreur dynamiques.Ce que vous pouvez essayer est d'ajouter un message après la fonction dans 'addMethod' comme vous l'avez fait pour la regex (qui va se débarrasser du message d'avertissement), mais je suppose que cela va remplacer celui que j'ai essayé de mettre –

0

je réponse boite9, et le fixa le problème et Ricky étaient ayant sur le message avec l'écrasement « Attention: Aucun message défini pour ... » donc la solution complète et de travail serait la suivante:

boite9 Citation:

Vous devriez faire une méthode spécifique à l'exigence , Plutôt que d'aller pour le générique regex:

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

Au lieu de montrer l'erreur vous, comme boite9 initialement proposé avec ShowErrors(), vous devez le définir comme le message par défaut pour cette validation, car le plugin jQuery.validation sera rechercher la valeur par défaut de toute façon, et remplacer toute erreur précédente affichée pour cet élément.

boite9 nouveau Citation:

Cela nécessite votre entrée d'avoir un attribut name.

Utilisez comme si:

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

Merci Box9 et Ricky pour l'affichage d'abord cela, car il m'a aidé à trouver la solution.