我正在尝试针对SQL Server 2005中的XML Schema验证XML输入,并且在验证电子邮件时出现错误:
Msg 6926,Level 16,State 1,Line 4
XML验证:无效的简单类型值:'john_doe@yahoo.com'。位置:/ :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>
与正则表达式匹配的每个电子邮件地址都被视为有效,除非其中包含下划线(johnDoe@yahoo.com
没有问题,john.doe@yahoo.com
没问题,但john_doe@yahoo.com
不是)。
如果删除下划线,则验证XML。
我已经使用各种工具测试了我的regexp(你可以在MSDN上找到用于验证电子邮件的那个),他们都说它有效。但不是SQL Server。
为什么不验证下划线?我在SQL Server中必须做些什么特别的事情吗?
答案 0 :(得分:2)
通过变通方法找到有关该问题的链接。 http://www.agilior.pt/blogs/rodrigo.guerreiro/archive/2008/11/14/5965.aspx
显然\w
应该包含下划线,除非涉及处理XSD架构。所以这不是特定的SQL Server问题。使用XMLSpy验证XML时,我有完全相同的行为。