我正在尝试创建一个包含日期字段的架构。此日期字段的格式为DD-MM-YYYY。 默认情况下,BizTalk接受格式为YYYY-MM-DD的日期。
我尝试使用正则表达式,下面是相关字段的xsd片段
<xs:element name="FieldName">
<xs:simpleType>
<xs:restriction base="xs:date">
<xs:pattern value="[0-3]{1}[0-9]{1}-[0,1]{1}[0-9]{1}-[0-9]{4}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
然后我尝试使用此方法验证文件,但是由于模式约束失败而导致错误。
正则表达式有什么问题?
先谢谢
答案 0 :(得分:0)
我几乎不建议不使用此正则表达式,因为它允许无效的日期,例如39-19-9999。
如果你想允许这样的无效日期,那么由你决定,但如果没有,我在这里发现了这个正则表达式:
^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$
还允许一些无效日期,例如31-06-2014(6月份没有31个月),但此正则表达式中允许的日期更少。
答案 1 :(得分:0)
我认为问题在于您的字段属于xs:date
类型。事实上BizTalk接受来自XSD规范本身的格式YYYY-MM-DD,这不是BizTalk的东西。见这里:http://www.w3schools.com/schema/schema_dtypes_date.asp
您会注意到您的正则表达式已作为xs:restriction
添加到架构中。这用于进一步限制该节点中包含的数据,但它必须仍然是有效的xs:date
。因此,我认为处理此问题的唯一方法是将字段类型更改为xs:string
并以其他方式处理日期(可能将其转换为地图)。