2009-07-08 5 views
1

Nous utilisons JAXB 1.0.6 (le projet a commencé avec JDK1.4 et c'est la dernière version compatible) pour créer des fichiers XML à partir d'une spécification XSD. Le XSD définit un attribut "email" avec le motif regexp suivant.Quelqu'un a aussi des problèmes avec la validation de JAXB, quand XSD contient la classe de caractères d'expression régulière w?

<xs:simpleType name="EmailAddress"> 
    <xs:restriction base="xs:string"> 
     <xs:minLength value="0"/> 
     <xs:maxLength value="60"/> 
     <xs:pattern value="([\w%\.\-][email protected][\w%\.\-]+\.[a-zA-Z]{2,6})?"/> 
    </xs:restriction> 
</xs:simpleType> 

si vous essayez d'entrer dans un e-mail [email protected] la validation échoue avec le message suivant:

attribute "email" has a bad value: the value does not match the 
regular expression "([\w%\.\-][email protected][\w%\.\-]+\.[a-zA-Z]{2,6})? 

à mon humble avis, la classe de caractère \ w est équivalent à [a-zA-Z0-9_]

Donc [email protected] satisfait l'expression. Si vous omettez le trait de soulignement, la validation réussira. Pourquoi cela arrive-t-il?

Observe

Répondre

2

Hmm. Pourquoi attendez-vous que le \w soit équivalent à [a-zA-Z0-9_]? Avez-vous essayé de remplacer le \w par l'expression?

Au premier coup d'oeil XML schema (search for \w) définit \w que

tous les caractères sauf le plateau de "ponctuation", "séparateur" et "autres" caractères

[tel que défini par Unicode]

et Unicode seems pour définir le trait de soulignement en tant que ponctuation (recherchez \p{P} dans le document lié).

+1

J'étais tellement naïf de croire que l'implémentation de regexp est identique partout. Maintenant, je vois que le motif XSD \ w a une signification différente de celle de JAVA. Merci. – huo73

+0

http://txt2re.com peut être utile pour des situations comme celle-ci. Il ne semble pas avoir "XML Schema" comme l'une de ses langues, mais peut-être l'un de ceux qu'il a est similaire ... – MatrixFrog

Questions connexes