C'est un plug sans vergogne, mais pourrait-je faire du bénévolat un cadre que j'ai dessiné? J'ai construit sur la base d'annotations (à la Hibernate Validator). Il prend en charge personnalisée des contraintes et je pense qu'il est assez puissant. Ici est également un Stackoverflow question où j'ai demandé une révision de l'encadrement.
-
Présentation: Avec de validation personnalisée de contraintes, vous pouvez lier la validation de la onChange élément. Aussi, parce que Regula prend en charge les validateurs personnalisés, vous pouvez avoir votre validateur personnalisé de mise à jour de la valeur d'un champ (donc changement
5
de 5.00
).
-
Effets secondaires: Regula prend en charge les effets secondaires via personnalisé contrainte-validateurs.
-
Groupes: Regula prend en charge les groupes de validation. Vous pouvez cibler des groupes spécifiques pour la validation. En combinant un validateur personnalisé et d'un groupe, vous pouvez contrôler le comportement de l'agent de validation de sorte qu'il valide seulement lorsque tous les éléments de ce groupe sont remplis (vous pouvez effectuer cette vérification via Javascript normale).
-
La validation côté serveur: Avec des contraintes, vous pouvez faire un appel AJAX pour effectuer la validation côté serveur. Avec la façon dont le cadre est structuré actuellement, ce doit être nécessairement un blocage de l'ajax à l'appel. J'ai l'intention d'ajouter une fonction asynchrone dans l'avenir.
-
Multiplee formes par page: Regula n'est pas limité à la validation d'un formulaire par page. Il peut gérer de multiples formes (pas sûr si j'ai bien compris votre exigence correctement de sorte que je n'aurais pas répondu à cette partie correctement).
-
Personnalisable d'affichage d'erreur: Regula ne fait rien à l'INTERFACE de la page d'aussi loin que la validation est concerné. Lorsque vous validez, vous obtenez un ensemble de violations de contrainte qui contiennent des messages d'erreur et autres. C'est à vous, comment les afficher.
-
Le saut de départ imperceptible: je n'ai pas exécuté l'une quelconque des repères, donc je ne peux pas dire à mon cadre de performance à cet égard.
-
Boutons de soumission: C'est quelque chose que j'ai encore à résoudre (vs asynchrone synchrone).
Voici quelques exemples:
Le tableau suivant indique la norme de validation, avec des contraintes:
<input id = "myInput"
name = "myInput"
type = "text"
class = "regula-validation"
data-constraints = '@NotEmpty @IsNumeric @Between(min=1, max=5)' />
jQuery(document).ready(function() {
// must call regula.binnd() first. The best place would be in an
// onload handler. This function looks for elements with
// a class name of "regula-validation" and binds the
// appropriate constraints to the elements
regula.bind();
jQuery("#myForm").submit(function() {
// this function performs the actual validation
var validationResults = regula.validate();
for(var index in validationResults) {
var validationResult = validationResults[index];
alert(validationResult.message);
}
});
});
Comme vous pouvez le voir, vous êtes seul à travailler avec les violations de contraintes, et donc la manière dont vous afficher le message d'erreur est entièrement à vous.
Voici un exemple d'une coutume contrainte:
regula.custom({
name: "MustBe42",
defaultMessage: "The answer must be equal to 42",
validator: function() {
return this.value == 42;
}
});
Et son utilisation:
<input id = "theAnswerToLifeTheUniverseAndEverything"
name = "theAnswerToLifeTheUniverseAndEverything"
value = ""
class = "regula-validation"
data-constraints = "@MustBe42" />
Depuis le validateur est une fonction Javascript, vous pouvez avoir n'importe quoi (si cela répond à votre question sur les effets secondaires).
Voici un exemple d'une autre contrainte qui accepte des paramètres:
regula.custom({
name: "DivisibleBy",
defaultMessage: "{label} must be divisible by {divisor}",
params: ["divisor"],
validator: function(params) {
var divisor = params["divisor"];
return (this.value % divisor) == 0;
}
});
Et l'utilisation:
<input id = "number"
name = "number"
value = ""
class = "regula-validation"
data-constraints = "@DivisibleBy(divisor=3, label='The Number')" />
Voici un exemple d'utilisation de groupes de validation:
<input id = "score"
name = "score"
type = "text"
class = "regula-validation"
data-constraints = '@IsNumeric(label="Score",
message="{label} needs to be a number!"
groups=[FirstGroup, SecondGroup, ThirdGroup]' />
<input id = "age"
name = "age"
type = "text"
class = "regula-validation"
data-constraints = '@IsNumeric(label="Age",
message="{label} needs to be a number!"
groups=[SecondGroup]' />
<input id = "name"
name = "name"
type = "text"
class = "regula-validation"
data-constraints = '@NotEmpty(label="Name",
message="{label} cannot be empty!"
groups=[FirstGroup]' />
Et un extrait de code qui valide seulement FirstGroup
(donc seulement score
et name
sont validés):
var constraintViolations = regula.validate({groups: [regula.Group.FirstGroup]});
var messages = "";
for(var index in constraintViolations) {
var constraintViolation = constraintViolations[index];
messages += constraintViolation.message + "\n";
}
if(messages != "") {
alert(messages);
}
Si vous avez l'intention de l'essayer, je vous conseille de télécharger la version 1.1.1. La documentation actuelle correspond à celle de la version en particulier. En 1.2.1 j'ai ajouté le support pour la composition de contraintes, mais je n'ai pas mis à jour ma documentation pour refléter cela.
Je comprends, si ce n'est pas l'adresse de tous vos soucis, ou si ce n'est pas ce que vous cherchez. J'ai pensé que je venais de mettre ça là. Aussi, si vous ne vérifiez ensuite je ferai en sorte de mettre à jour la documentation pour refléter la version 1.2.1. J'ai été très occupé avec l'école et au travail et donc je n'ai pas eu le temps de le faire.
Mise à JOUR #1
Sohnee mentionné la validation côté client. Je travaille actuellement sur une intégration entre le Régulateur et le Printemps 3. J'espère que je devrait être en mesure de libérer le plus tôt possible (en fonction de nouveau, sur le travail et l'école). L'intégration fonctionne grâce à la traduction de Hibernate validation des contraintes de Regula validation de contraintes. De cette façon, vous n'avez qu'à écrire le code de validation une fois (pour la plupart). Pour personnalisé contraintes bien, vous allez toujours avoir à écrire du code Javascript côté (le validateur personnalisé). Mais une fois que vous annoter le code côté serveur avec Hibernate validation de contraintes, vous n'avez pas besoin de faire quoi que ce soit sur le côté client; ces contraintes sont automatiquement appliquées à des éléments de formulaire côté client.
Matthew Abbott a également été en mesure d' intégrer avec Regula ASP.NET MVC.
Mise à JOUR #2
J'ai une démo de l'application web (mavenized) sur github qui met en valeur l'intégration entre Regula et Spring 3.0.x Web MVC en utilisant Hibernate Validator. Ce n'est pas vraiment documenté ou quoi que ce soit, c'est plus une preuve de concept. J'ai l'intention d'ajouter de la documentation à la page github sur l'intégration et la façon dont il fonctionne.
Mise à JOUR #3
J'ai mis à jour la documentation sur le wiki, et à présent, il correspond à la dernière version 1.2.2 (j'ai fait une petite correction, c'est pourquoi il est 1.2.2 maintenant).