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

Luk*_*ley 6 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>
Run Code Online (Sandbox Code Playgroud)

我只是想在上面的例子中我可以尝试并只使用xsd:patterncharset.

我试图使用[A-Za-z \-&apos;]*哪个返回一个名称,Luke2如有效,但架构验证说它不是因为它包含一个数字.

我的问题是,如何在一个c#正则表达式中复制上述内容?此外,架构模式的运行方式与我使用它的方式之间是否有任何差异.NET

Luk*_*ley 2

我发现了问题,尽管由于我没有真正广泛地工作而被掩盖XML Schema

区别

CharsetD类型不仅仅使用模式,因为仅此模式还不足以用数字验证名称,因此当我尝试仅使用模式时 - 它允许使用数字。然而,类型上有一行限制了数字,因此模式会返回错误,而正则表达式不会返回错误。

<xsd:restriction base="xsd:string">
Run Code Online (Sandbox Code Playgroud)

解决方案

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

^[\p{L} \.\-]+$
Run Code Online (Sandbox Code Playgroud)