2011-04-07 2 views
2

Il existe une validation regex dans JSR-303 (javax.validation). Par exemple:Validation Regex - montrer le (s) caractère (s) fautif (s). javax.validation

@Pattern(regexp="[\w_\\.]+") 
private String username; 

Le message par défaut affiché lorsque la valeur est non valide (ne correspond pas à l'expression régulière) est quelque chose comme « doit correspondre {regex} ». Mais les utilisateurs ne comprennent pas regex, donc il n'est pas pertinent de leur montrer. Une option est de simplement montrer "Le nom d'utilisateur contient des caractères illégaux", et il sera probablement très bien dans la plupart des cas. Mais il sera bon de montrer quel personnage a tort.

Cela ne peut pas être directement réalisé avec regex - il correspond ou non. Vous devez soit définir d'autres modèles qui manquent certains composants, soit essayer de supprimer des caractères de la chaîne jusqu'à ce qu'elle corresponde, puis montrer ces caractères à l'utilisateur.

C'était en général. Une autre question est comment y parvenir avec javax.validation.

Donc, pour résumer la question: « Les personnages, * et $ sont illégales »

Comment afficher les caractères offensants avec javax.validation, de sorte que le message ressemble

+1

Parfois, c'est une bonne idée de ne pas dire ce qui est illégal, mais de dire ce qui est légal. Par exemple: "Le nom d'utilisateur doit être constitué uniquement de chiffres et de lettres." – Ingo

+0

@Ingo - oui, mais quand on ajoute "underscore and dot" ("et dash and tilde"), ça devient trop verbeux. – Bozho

Répondre

2

J'irais avec une version niée de votre modèle de validation. Donc, votre modèle serait juste:

[^\w_\\.] 

En cas d'échec de la validation, qui correspond à la chaîne d'entrée et de sortie des résultats à l'utilisateur.

+0

bonne idée. Pour cela, j'ai besoin d'un validateur personnalisé. – Bozho

+0

@Bozho - N'oubliez pas que vous aurez également besoin de quelque chose pour vous assurer que l'entrée n'est pas vide si vous le faites de cette façon. –

Questions connexes