XSD正则表达式验证失败:意外的元字符

时间:2010-07-21 01:36:11

标签: regex xsd

此代码段

<xsd:element name="HomePhone" minOccurs="0">
    <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:pattern value="^+[0-9]{1,2}-[0-9]{1,2}-[0-9]{3}[0-9]{0,1}-[0-9]{3}[0-9]{0,1}$"></xsd:pattern>
            </xsd:restriction>
    </xsd:simpleType>
</xsd:element>

正在返回错误

  

XSD:正则表达式   “^ + [0-9] {1,2} - [0-9] {1,2} - [0-9] {3} [0-9] {0,1} - [0-9] { 3} [0-9] {0,1} $”   未能在位置1验证:   意外的元字符。

知道出了什么问题吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

^     Start of line
+     preceding character one or more times

没有'前面的字符'。

答案 1 :(得分:2)

在XML Schema正则表达式中,所有匹配都隐式锚定在两端,因此您无需添加^$。根据规范,这两个字符应该被视为文字文本。但如果是这种情况,正则表达式中的^+会尝试匹配一个或多个^字符,而不是抛出异常。

尽管有规格,但我怀疑它们被视为锚点。并且多次匹配锚是没有意义的,因此+被视为错误。想想看,无论如何在这个位置都有量词是没有意义的; +应该做什么?无论如何,如果删除该字符,你的正则表达式应该有效。