6

由于许多限制性原因,我无法真正深入了解我的项目。

本质上,我试图在序列化对象之前对其进行预验证,然后根据模式对其进行验证。架构对名称进行了验证,我知道这并不理想,最好不要验证名称 - 但我似乎无法为架构尝试执行的操作复制有效的正则表达式。

<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:patternfor charset

我尝试使用[A-Za-z \-&apos;]*which 返回一个名称,例如Luke2valid,但模式验证表明它不是因为它包含一个数字。

我的问题是,如何在单个c#正则表达式中复制上述内容?此外,模式模式的运行方式与我使用它的方式相比有什么不同.NET吗?

4

1 回答 1

2

我发现了这个问题,尽管我没有真正广泛使用过XML Schema

区别

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

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

解决方案

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

^[\p{L} \.\-]+$
于 2012-12-19T12:02:07.100 回答