2012-12-19 68 views
6

由于种种限制原因,我无法真正深入我的项目。XSD:Pattern和C#Regex之间有区别吗?

本质上,我试图在序列化它之前预先验证对象,然后根据模式对其进行验证。这个模式验证了一个名字,我知道这不是一个理想的名字,你最好不要验证一个名字 - 但我似乎无法复制一个有效的正则表达式来表示模式正在尝试做什么。

<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:patterncharset上述情况。

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

我的问题是,我怎么能复制上述在一个单一的c#正则表达式?另外,模式模式如何运作,与我在未来可以注意到的.NET中是否有区别?

回答

2

我已经发现了这个问题,虽然伪装成我还没有真正广泛地与XML Schema

的差异

CharsetD类型不只是使用该模式的工作,因为这本身ISN”用数字验证名称是足够好的,所以当我试图使用模式时 - 它允许使用数字。在类型上有一行限制数字,因此为什么模式在正则表达式没有返回错误。

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

解决方案

我创建了一个不同的单正则表达式这将迎合了在我的架构应用的string限制。

^[\p{L} \.\-]+$ 
相关问题