2016-11-03 3 views
1

J'ai regex pour valider le numéro de mobile. Il travaille en PHP et JS, mais lorsque je tente de le mettre en œuvre dans le schéma xml J'obtiens l'erreur « Demande de validation XSD contre my.xsd échoué. "failed to compile: xmlFAParseAtom: expecting ')'","failed to compile: xmlFAParseRegExp: extra characters","Element '{http://www.w3.org/2001/XMLSchema}pattern': The value of the facet 'pattern' is not a valid regular expression."Syntaxe correcte de regex dans le schéma XML

Exemple de mon XSD

<xs:simpleType name="mobile-number"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="(?:(?:\(?(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?(?:\(?0\)?[\s-]?)?)|(?:\(?0))(?:(?:\d{5}\)?[\s-]?\d{4,5})|(?:\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3}))|(?:\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4})|(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}))(?:[\s-]?(?:x|ext\.?|\#)\d{3,4})?"/> 
    </xs:restriction> 
</xs:simpleType> 

J'ai essayé seulement cette partie trop (?:(?:\(?(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?(?:\(?0\)?[\s-]?)?)|(?:\(?0)) et a même erreur

Répondre

2

Il y a 14 groupes dans le modèle et XSD Schema regex syntax ne supporte pas une telle construction de regroupement tous sont non-capture., vous devez convertir tous les groupes non-capture ((?:...)) à capturi ng ((...)) ceux.

Utilisez

<xs:pattern value="((\(?(0(0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?(\(?0\)?[\s-]?)?)|(\(?0))((\d{5}\)?[\s-]?\d{4,5})|(\d{4}\)?[\s-]?(\d{5}|\d{3}[\s-]?\d{3}))|(\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4})|(\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}))([\s-]?(x|ext\.?|#)\d{3,4})?" /> 
+0

Merci beaucoup! :) – SomethingElse