Regex 不允许空字符串的XML架构限制模式
在我的XML模式中,我有字符串类型的元素,我不希望它是空的(如果它包含空格等,我也认为它是空的) 我申请了我在Regex 不允许空字符串的XML架构限制模式,regex,xsd,Regex,Xsd,在我的XML模式中,我有字符串类型的元素,我不希望它是空的(如果它包含空格等,我也认为它是空的) 我申请了我在 该模式究竟做了什么,并将实现我的期望?该模式: 零个或多个字符*(匹配任何字符) 匹配不在列出的字符集中的内容\s是空白,因此[^\s]是“匹配非空白的内容。匹配中的首字母^否定正常匹配这些字符中的任何一个 零个或多个字符 查看帖子“不允许空字符串的模式”的主题,该主题仍然没有得到回答。您可以使用标记来禁止空格 空白约束设置为“折叠”,它将执行以下操作 删除所有空白字符,包括换行
该模式究竟做了什么,并将实现我的期望?该模式:
- 零个或多个字符
(*
匹配任何字符) - 匹配不在列出的字符集中的内容
是空白,因此\s
是“匹配非空白的内容。匹配中的首字母[^\s]
否定正常匹配这些字符中的任何一个^
- 零个或多个字符
标记来禁止空格
空白
约束设置为“折叠”,它将执行以下操作
参考资料:我不知道是否仍然有用,但我发现了一个比第一篇文章更好的模式。这里是:
<xs:simpleType name="nonEmptyString">
<xs:restriction base="xs:string">
<xs:pattern value="(\s*[^\s]\s*)+"></xs:pattern>
</xs:restriction>
</xs:simpleType>
使用Eclipse似乎很好。这不正是您想要的吗
<xs:restriction base="xs:token">
<xs:minLength value="1"/>
</xs:restriction>
如果字符串只包含空格(换行符、回车符、制表符、前导空格和尾随空格),处理器将删除它们,因此验证将失败;如果还有其他内容,验证将成功。
(注意:两个或两个以上空格的内部序列将被删除-请确保您没有问题)它拒绝带有回车字符的文本。为什么?@jlp:“
匹配任何字符“是快速版本。完整版本包括一个注意事项,根据正则表达式引擎的不同,默认情况下可能不匹配换行符。尝试将*
替换为[。\s]*
,因为\s
匹配项同时包括换行符和回车符。您能写出符合问题要求的模式吗?@jlp:什么要求?问题是“这个模式意味着什么?”。字符串不是空的(只有空格和换行符意味着也是空的)您对“collapse”值的描述似乎不正确;尤其是1号。数字1中唯一正确的部分是数字2中重复的部分。但是考虑到你的资料来源(w3schools),我可以理解为什么你可能会感到困惑;W3Schools在很多方面都是一个相当低质量的来源。(见)@Andrew谢谢你的指点。我还引用了W3C作为参考,W3C空白点2,3似乎是完全正确的。虽然没有提到第1点,但它也在工作中更新了参考资料,对参考资料进行了极好的更新。我仍然有点不确定#1(#2,3绝对正确,正如你所注意到的)。在#1上,它不是将这些类型的空白转换为空格,而不是简单地删除它们吗?(然后,随后,将所有空间压缩为单个空间…)我刚刚编写了5个单元测试,测试a)空字符串b)单个空间c)d)包含新行的多个空间e)包含多个新行的多个空间。它适用于所有这些情况,因此我建议这是一个很好的解决方案,适用于任何需要它的人!:)做得好。这是所有对我的用例+1有效的答案中唯一的解决方案。这一个非常有效,与线程海报示例相比的区别在于,它使用了\s*而不是。*。不符合新线!它是有效的,但它之所以有效,仅仅是因为它使用了:限制。所以没有其他的魔法存在。
<xs:restriction base="xs:token">
<xs:minLength value="1"/>
</xs:restriction>