OVH Cloud OVH Cloud

expressions réguliéres

2 réponses
Avatar
tomcat
Bonjour,
développant une application web basée sur le framework struts, j'ai
besoin de vérifier la validité de certains champs de formulaires par le
biais des expressions réguliéres. Le souci est dans la construction de
mes patterns, un exemple pour vérifier la validité d'un email :
Pattern p = Pattern.compile("\w{1,}(\.\w{1,})?@\w{2,}\.\w{2,4}");
ce pattern devrait fonctionner en cet état, seulement si je veux que
cela fonctionne, je dois doubler les back-slash, ce qui fait :
Pattern p = Pattern.compile("\\w{1,}(\\.\\w{1,})?@\\w{2,}\\.\\w{2,4}");
or d'aprés la javadoc je n'ai pas besoin de faire ça !!!
Dans un autre exemple, pour tester le format d'une date (jj-mm-aaaa) qui
devrait simplement être : \d{2}-\d{2}-\d{4}
ça ne marche même pas ! Apparement, c'est le tiret qui pose problème.
Quelqu'un pourrait-t-il éclairer ma lanterne ?
D'avance merci.

2 réponses

Avatar
Marc Petit-Huguenin
tomcat wrote:
Bonjour,
développant une application web basée sur le framework struts, j'ai
besoin de vérifier la validité de certains champs de formulaires par le
biais des expressions réguliéres. Le souci est dans la construction de
mes patterns, un exemple pour vérifier la validité d'un email :
Pattern p = Pattern.compile("w{1,}(.w{1,})?@w{2,}.w{2,4}");
ce pattern devrait fonctionner en cet état, seulement si je veux que
cela fonctionne, je dois doubler les back-slash, ce qui fait :
Pattern p = Pattern.compile("w{1,}(.w{1,})?@w{2,}.w{2,4}");
or d'aprés la javadoc je n'ai pas besoin de faire ça !!!


C'est vrai, sauf que dans une chaine de charactere tu dois doubler les
antislash si c'est un caractere, et non pas la sequence d'echappement.

Dans un autre exemple, pour tester le format d'une date (jj-mm-aaaa) qui
devrait simplement être : d{2}-d{2}-d{4}


J'ai teste et a part le fait que les antislash doivent etre double quand
c'est dans une chaine Java, ca marche.


ça ne marche même pas ! Apparement, c'est le tiret qui pose problème.
Quelqu'un pourrait-t-il éclairer ma lanterne ?
D'avance merci.


Avatar
Cédric Chabanois
tomcat wrote:

Bonjour,
développant une application web basée sur le framework struts, j'ai
besoin de vérifier la validité de certains champs de formulaires par le
biais des expressions réguliéres. Le souci est dans la construction de
mes patterns, un exemple pour vérifier la validité d'un email :
Pattern p = Pattern.compile("w{1,}(.w{1,})?@w{2,}.w{2,4}");
ce pattern devrait fonctionner en cet état, seulement si je veux que
cela fonctionne, je dois doubler les back-slash, ce qui fait :
Pattern p = Pattern.compile("w{1,}(.w{1,})?@w{2,}.w{2,4}");
or d'aprés la javadoc je n'ai pas besoin de faire ça !!!


Si tu travailles avec Struts, commons-validator (livré avec Struts il me
semble) permet de valider une adresse email (il utilise pour celà les
expressions régulières)

Sinon la javadoc dit clairement que c'est nécessaire de doubler les
(doc de Pattern)
"
Backslashes within string literals in Java source code are interpreted
as required by the Java Language Specification as either Unicode escapes
or other character escapes. It is therefore necessary to double
backslashes in string literals that represent regular expressions to
protect them from interpretation by the Java bytecode compiler. The
string literal "b", for example, matches a single backspace character
when interpreted as a regular expression, while "b" matches a word
boundary. The string literal "(hello)" is illegal and leads to a
compile-time error; in order to match the string (hello) the string
literal "(hello)" must be used.
"

Dans un autre exemple, pour tester le format d'une date (jj-mm-aaaa) qui
devrait simplement être : d{2}-d{2}-d{4}



Ben chez moi pas de problème avec le plugin d'eclipse RegExp Tester çà
passe ...

Cédric