[英]Regular Expression in schema validation
我需要一個xml架構,它驗證一個空節點和一個8位數的節點為true。 所以我用以下簡單類型定義了一個XML-Schema:
<xs:simpleType name="LeererStringOder8Zeichen">
<xs:restriction base="xs:string">
<xs:pattern value="(^$|\d{8})"/>
</xs:restriction>
</xs:simpleType>
我已經使用java.util.regex和Xerces的內部RegularExpression類嘗試了這個正則表達式。 兩者都歸於真。 但是當我在我的WS中使用這個simpleType(使用CXF實現)時,當我提交一個空字符串(例如)時,我得到驗證錯誤。 為什么? 有沒有人有想法,如何更改我的架構,它接受一個空標簽和一個包含8位數的標簽?
感謝幫助,安德烈亞斯
這將有效:
<xs:simpleType name="LeererStringOder8Zeichen">
<xs:restriction base="xs:string">
<xs:pattern value="|\d{8}"/>
</xs:restriction>
</xs:simpleType>
|\\d{8}
表示不匹配或八位數。 (你也可以使用|[0-9]{8}
。)
似乎原因(^$|\\d{8})
(雖然我認為你的意思是^(|\\d{8})$
)不起作用是因為這個XML Schema Regular Expressions頁面指出:
特別值得注意的是完全沒有像插入符號和美元,單詞邊界和外觀等錨點。 XML模式始終隱式地錨定整個正則表達式。 正則表達式必須匹配元素的整個元素才能被視為有效。
因此,您的錨點顯然導致正則表達式無法按預期運行。
正如@dbank指出的那樣,XSD中的正則表達式是隱式錨定的,$和^符號不會被識別為元字符。 但是,一些XSD“實現”(所謂的)已經忽略了這里的規范,並且只是將所有正則表達式處理委托給一些不了解XSD規則的底層庫。
我自己選擇匹配零長度字符串或正好8位數的正則表達式(\\d{8})?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.