簡體   English   中英

模式驗證中的正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM