限制 XSD 中的字符串,使它们没有前导或尾随空格,并且只包含字母数字、连字符和下划线?
Posted
技术标签:
【中文标题】限制 XSD 中的字符串,使它们没有前导或尾随空格,并且只包含字母数字、连字符和下划线?【英文标题】:Restrict strings in XSD so they don't have leading or trailing whitespace and only contain alphanumerics, hyphen and an underscore? 【发布时间】:2019-01-27 06:25:03 【问题描述】:我正在尝试消除前导/尾随空格,并且还想确保我的字符串不包含特殊字符(“-”和“_”除外,我需要这些)。从其他帖子中我能够想出这个
<xs:simpleType name="RandomString">
<xs:restriction base="xs:string">
<xs:pattern value="\S([a-zA-Z0-9_-]*\S)?"/>
</xs:restriction>
</xs:simpleType>
到目前为止,我能够想出一种方法来不允许前导、尾随空格和多个特殊字符。但是,我有这种独特的情况,它允许任何一个特殊字符出现在字符串的末尾
如abcdef1234!@#
和abc123!xyz
这样的字符串根据正则表达式是不允许的,但是像abc123!
或random234@
(只有一个特殊字符结束字符串)没有被我的正则表达式捕获。我错过了什么吗?
【问题讨论】:
我提出上述方案的参考:***.com/questions/35815521/… 您希望在字符串中允许哪些字符作为前导/尾随? 你只需要[a-zA-Z0-9_-]+
@PushpeshKumarRajwanshi 它只是我想在字符串的前导/尾随位置避免的空白/空格,显然没有特殊字符。
@pj0129:你想在文本中间允许空格吗?如果没有,那么 Wiktor 的回答对你来说应该足够好了。
【参考方案1】:
您的正则表达式匹配不受欢迎的字符串,因为 \S
匹配 any 非空白字符。
您的 [a-zA-Z0-9_-]
字符类与空格不匹配,因此您可以完全省略 \S
模式并使用
<xs:pattern value="[a-zA-Z0-9_-]+"/>
请参阅regex demo。
【讨论】:
是的 Wiktor,现在这一切都说得通了,我自己在我的模式中的第一个\S
中允许它。感谢您的解决方案的帮助。以上是关于限制 XSD 中的字符串,使它们没有前导或尾随空格,并且只包含字母数字、连字符和下划线?的主要内容,如果未能解决你的问题,请参考以下文章