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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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.
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
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 ...
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 ...