2009-07-08 12 views
1

Wir verwenden JAXB 1.0.6 (das Projekt hat mit JDK1.4 begonnen und dies ist die letzte kompatible Version), um XML-Dateien aus einer XSD-Spezifikation zu erstellen. Die XSD definiert ein Attribut "email" mit dem folgenden regexp-Muster.Jeder hat auch Probleme mit der JAXB-Validierung, wenn XSD die reguläre Ausdruckszeichenklasse w enthält.

<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> 

wenn Sie versuchen, eine E-Mail [email protected] die Validierung mit der folgenden Meldung fehl ein:

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

IMHO, die Zeichenklasse \ w entspricht [a-zA-Z0-9_]

Also [email protected] erfüllt den Ausdruck. Wenn Sie den Unterstrich weglassen, wird die Validierung erfolgreich durchgeführt. Warum passiert dies?

Grüße

Antwort

2

Hmm. Warum erwarten Sie, dass \w[a-zA-Z0-9_] entspricht? Haben Sie versucht, die \w durch den Ausdruck zu ersetzen?

Auf den ersten Blick XML schema (search for \w) definiert \w als

alle Zeichen außer dem Satz von "Interpunktions", "Separator" und "andere" Zeichen

[wie von Unicode definiert]

Und Unicode seems zu Unterstreichung als Interpunktion definieren (Suche nach \p{P} im verknüpften Dokument).

+1

Ich war so naiv zu glauben, Regexp-Implementierung ist immer identisch. Jetzt sehe ich, dass das XSD-Muster \ w eine andere Bedeutung hat als das gleiche in JAVA. Danke. – huo73

+0

http://txt2re.com kann für solche Situationen nützlich sein. Es scheint nicht "XML Schema" als eine seiner Sprachen zu haben, aber vielleicht ist eine der Sprachen, die es hat, ähnlich ... – MatrixFrog