如何限制XSD中的字符串,使其不具有前导空格或尾随空格?

时间:2016-03-05 14:52:20

标签: regex xsd

我试图做一些非常简单的事,但为什么这么难?我只是想禁止前导和尾随空格,并保持字符串中的其他所有内容(包括中间空格)

  <xs:simpleType name="NonEmptyString"> 
    <xs:restriction base="xs:string">
      <xs:minLength value="1" />
      <xs:pattern value=".*[^\s].*"/> <!-- read my comments on sri's answer -->
    </xs:restriction>
  </xs:simpleType>

我真的非常难倒

这些正则表达式对我来说都不适用于我的XSD甚至是在线正则表达式测试人员(除了一些将在/ g在在线测试仪的单独框中使用但我无法弄清楚如何获得那要在XSD中工作)

我从这些页面尝试了所有这些,没有一个匹配:

1 个答案:

答案 0 :(得分:1)

如果通过&#34;前导和尾随空格&#34;你的意思是字符串的第一个字符和最后一个字符(如果有的话)都不是空白(U + 0020),那么

[^ ](.*[^ ])?

应该没问题。如果还应允许空字符串,请将整个表达式设为可选:

([^ ](.*[^ ])?)?

第一个字符类[^ ]匹配前导非空格。 .*允许在该初始字符之后的任何字符序列,以另一个非空白字符结尾。由于没有前导或尾随空格的字符串集包括&#34; a&#34;和其他单字符串。 <{1}}和第二个字符类表达式用括号括起来并且是可选的。

如果通过&#34;前导和尾随空格&#34;你的意思是&#34; ... whitespace&#34;,那么最简单的事就是使用.* \ s`:

\S', the complement of the whitespace escape

使用在线正则表达式测试时,请记住正则表达式有许多不同的符号,而XSD的模式方面总是尝试匹配整个输入文字,因此XSD正则表达式对{许多其他符号中使用的{1}}和\S(.*\S)? 个锚点。