XSD:Pattern和C#Regex之间有区别吗?

时间:2012-12-19 11:16:36

标签: c# regex xsd

出于一些限制原因,我无法真正深入了解我的项目。

本质上,我试图在序列化之前预先验证对象,然后根据模式验证它。模式验证了一个名称,我知道这个名称并不理想,最好不要验证名称 - 但我似乎无法复制一个有效的正则表达式来解决模式试图做的事情。

<xsd:simpleType name="CharsetD">
  <xsd:restriction base="xsd:string">
    <xsd:pattern value="[A-Za-z \-&apos;]*"/>
  </xsd:restriction>
</xsd:simpleType>

<xsd:element minOccurs="0" maxOccurs="2" name="Fore">
  <xsd:simpleType>
    <xsd:restriction base="CharsetD">
      <xsd:minLength value="1"/>
      <xsd:maxLength value="35"/>
      <xsd:pattern value="[A-Za-z].*"/>
    </xsd:restriction>
  <xsd:simpleType>
</xsd:element>

我只是在上述情况下认为我可以尝试使用xsd:pattern作为charset

我尝试使用[A-Za-z \-&apos;]*返回名称Luke2作为有效名称,但架构验证表明它不是因为它包含数字。

我的问题是,如何在单个c#正则表达式中复制上述内容?另外,架构模式的运作方式与我在.NET中使用它的方式之间是否有任何差异?我可以注意到它的未来?

1 个答案:

答案 0 :(得分:2)

我发现了这个问题,虽然我没有真正与XML Schema

进行广泛的合作。

差异

CharsetD类型不只是使用模式,因为仅凭这个不足以用数字验证名称,因此当我尝试仅使用模式时 - 它允许数字。然而,类型上有一行限制数字,因此架构返回正则表达式没有的错误。

<xsd:restriction base="xsd:string">

<强>解决方案

我创建了一个不同的单一正则表达式,它可以满足我的架构中应用的string限制。

^[\p{L} \.\-]+$