禁止字符串以空格开头或结尾的 XSD?
Posted
技术标签:
【中文标题】禁止字符串以空格开头或结尾的 XSD?【英文标题】:XSD that prohibits strings from starting or ending with whitespace? 【发布时间】:2021-12-29 13:40:37 【问题描述】:我们在加载 XML 文件之前使用 XSD 模式验证。因此,在使用 XSD 模式验证加载 XML 时,它接受字符串开头和结尾的空格。我们只需要限制字符串开头和结尾的空格。但是在字符串中间我们需要接受字符串之间的空格。
例如:SOMEXMLFIELD ="STACK OVER FLOW"
.
为此,我们为架构验证配置了以下 XSD 模式值。
例如:<xs:pattern value="^[A-Za-z0-9 _.,']*[A-Za-z0-9_.,']+[A-Za-z0-9 _.,']*$"/>
谁能建议我如何限制字符串开头和结尾的空格(注意:我们需要接受字符串之间的空格)? .
【问题讨论】:
【参考方案1】:这个 XSD,
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="e">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[^\s]?"/>
<xs:pattern value="[^\s].*[^\s]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
将允许e
具有内部空格,但不能以空格开头或结尾。
请注意,XSD 正则表达式模式是隐式锚定的,因此不要使用 ^
和 $
进行锚定。
Reference:
注意:不同于一些流行的正则表达式语言(包括 那些由 Perl 和标准 Unix 实用程序定义的),常规 此处定义的表达式语言隐式锚定所有正则 头部和尾部的表达式,作为正则的最常见用法 ·pattern· 中的表达式是匹配整个文字。
更新: @Thefourthbird had a good point 应该允许 1 和 2 个不带前导/尾随空格的字符串。我也扔了空字符串。
【讨论】:
【参考方案2】:如果您还想允许匹配 1 和 2 个字符,您可以在不允许空格的情况下开始匹配,并且可以选择匹配任何字符,包括中间的空格,然后再次匹配没有空格的字符。
[A-Za-z0-9_.,']([A-Za-z0-9 _.,']*[A-Za-z0-9_.,'])?
Regex demo
简而言之:
[\w.,']([\w .,']*[\w.,'])?
【讨论】:
关于允许 1 或 2 个字符的好点。我更新了可能会回答并归功于您的观察。 请注意,XSD 正则表达式模式会自动在前端和后端锚定,因此您不需要前导^
和尾随 $
。
@kjhughes 感谢您的评论,我不知道。
您好,感谢您的建议。
这适用于我的代码。以上是关于禁止字符串以空格开头或结尾的 XSD?的主要内容,如果未能解决你的问题,请参考以下文章