2011-10-03 61 views
4

我试图验证对SQL Server 2005中的XML架构的XML输入和确认电子邮件时,我得到一个错误:SQL服务器 - XML验证:无效的简单类型值

消息6926 ,Level 16,State 1,Line 4

XML验证:无效简单类型值:'[email protected]'。位置:/ :XXX [1]/:YYY [1]/*:电子邮件[1]

电子邮件字段在架构定义为:

<xsd:simpleType name="EMailType"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:pattern value="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" /> 
    </xsd:restriction> 
    </xsd:simpleType> 

每个电子邮件地址匹配正则表达式被认为是有效的,除了有下划线的东西([email protected]是好的,[email protected]是好的,但[email protected]不是)。

如果我删除下划线,则验证XML。

我用各种工具测试了我的regexp(这是你可以在MSDN上找到的用于验证电子邮件的那个),他们都说它是有效的。但不是SQL Server。

为什么它不验证下划线?在SQL Server中有什么特别的我必须做的吗?

+0

同样的问题: http://stackoverflow.com/questions/2973052/underscore-not-accepting-in-xml-schema-for-email-address – Asken

+0

@Asken:该职位治疗无效的正则表达式。我的正则表达式是有效的,SQL Server拒绝验证其中的下划线(从我可以发现它与SQL注入有关,因为_是搜索通配符) – JohnDoDo

+0

对不起,如果这是一个愚蠢的问题,但你的正则表达式模式不允许'_'对吗?至少这是在XMLSpy中使用它的行为。所以预期来自SQL Server的错误信息是因为'_'不被允许或者我错过了什么? –

回答