首页 > 解决方案 > 限制 XSD 中的字符串,使它们没有前导或尾随空格,并且只包含字母数字、连字符和下划线?

问题描述

我正在尝试消除前导/尾随空格,并且还想确保我的字符串不包含特殊字符(“-”和“_”除外,我需要这些)。从另一篇文章中,我能够想出这个

<xs:simpleType name="RandomString"> 
    <xs:restriction base="xs:string">
      <xs:pattern value="\S([a-zA-Z0-9_-]*\S)?"/> 
    </xs:restriction>
 </xs:simpleType>

到目前为止,我能够想出一种方法来不允许前导、尾随空格和多个特殊字符。但是,我有这种独特的情况,它允许任何一个特殊字符出现在字符串的末尾

即,根据正则表达式,不允许使用类似abcdef1234!@#和的字符串,但我的正则表达式没有捕捉到类似或(只有一个特殊字符结束字符串)之类的字符串。我错过了什么吗?abc123!xyzabc123!random234@

标签: regexxmlxsd

解决方案


您的正则表达式匹配不受欢迎的字符串,因为\S匹配任何非空白字符。

您的[a-zA-Z0-9_-]字符类与空格不匹配,因此您可以\S完全省略模式并使用

<xs:pattern value="[a-zA-Z0-9_-]+"/>

请参阅正则表达式演示


推荐阅读