我需要指定某些XML元素始終不爲空且不爲空。我發現this question,這表明使用限制將minLength
設置爲1.但是一些海報建議使用帶有正則表達式的模式限制,而不是或限制minLength
限制。一個正則表達式優於minLength
的好處是什麼?爲什麼使用正則表達式,如果你需要一個非空元素?
回答
使用正則表達式允許一個在指定的有效性,而不是僅僅依靠長度的空白和非空白字符之間進行區分。
例如,如果沒有正則表達式,NonEmptyString
,
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
將允許<x> </x>
(但不是<x/>
或<x></x>
)。 這可能是也可能不是你想要的。
雖然,與正則表達式,NonEmptyStringWithoutSpaces
,
<xs:simpleType name="NonEmptyStringWithoutSpaces">
<xs:restriction base="xs:string">
<xs:pattern value="\S+"/> <!-- one or more non-whitespace chars -->
</xs:restriction>
</xs:simpleType>
將不允許<x> </x>
(並且仍然允許未<x/>
或<x></x>
以及)。但請注意,這也不允許<x>A B</x>
。 這可能不是你想要的。
如果你想允許嵌入的空格,你可以使用
<xs:simpleType name="NonEmptyNonBlankString">
<xs:restriction base="xs:string">
<xs:pattern value=".*\S.*"/> <!-- at least one non-whitespace char -->
</xs:restriction>
</xs:simpleType>
到不允許<x> </x>
,<x/>
,或<x></x>
,同時允許<x>A B</x>
和<x> A </x>
。或者,沒有正則表達式,你可以使用一個xs:whiteSpace
方面:
<xs:simpleType name="NonEmptyNonBlankString">
<xs:restriction base="xs:string">
<xs:minLength value="1" />
<xs:whiteSpace value='collapse'/>
</xs:restriction>
</xs:simpleType>
這可能是你想要的。
非常感謝。我測試了一下,看起來由單個空格組成的值被拒絕了,這讓我認爲值自動被修剪。但這可能是一個危險的假設,正則表達式更可靠。 –
@ROBERTRICHARDSON,根據簡單類型定義的基本類型的空白麪的值,可以修剪或不修剪空白。 –
- 1. 爲什麼這個正則表達式需要一個空間?
- 2. 爲什麼在這個正則表達式中需要一個空格?
- 3. 需要一個正則表達式C#
- 4. 需要一個正則表達式
- 5. 需要一個正則表達式
- 6. 是什麼?你在正則表達式
- 7. 用空白替換一個元素。 (Perl正則表達式)
- 8. 需要使用正則表達式
- 9. 需要使用正則表達式
- 10. 需要使用正則表達式
- 11. 我需要使用正則表達式
- 12. 需要使用正則表達式
- 13. 爲什麼is關鍵字需要一個非空的表達式?
- 14. 正則表達式需要
- 15. 正則表達式需要
- 16. 爲什麼使用PCRE庫時需要顯式編譯正則表達式?
- 17. 正則表達式元素
- 18. 爲什麼Java有一個replaceAll(正則表達式,替換),但replaceAll(正則表達式,正則表達式)?
- 19. 這個正則表達式爲什麼不用空格?
- 20. 匹配一個空元素的正則表達式
- 21. 正則表達式 - 爲什麼使用空括號?
- 22. 如果不爲空用正則表達式替換,如果爲空,則什麼都不做
- 23. 需要一個正則表達式使用java
- 24. 「你不能用正則表達式解析HTML」爲什麼?
- 25. 會有什麼的正則表達式我需要的模式
- 26. 正則表達式用一個空行
- 27. 爲什麼這個空間在這個正則表達式中很重要?
- 28. Rails的 - 你怎麼插入一個變量爲正則表達式(正則表達式)例如assert_match
- 29. 需要用正則表達式
- 30. 我需要用正則表達式
我需要的是確保至少有一個非空白字符。嵌入的空白是有效的。 –
然後你需要使用正則表達式。有關詳細信息,請參見[我的答案](http://stackoverflow.com/a/35707836/290085)。 – kjhughes