帮助正则表达式 - XSD中的DateTime验证

时间:2011-06-29 07:16:12

标签: regex xsd

我有以下内容:

<xsd:restriction base="xsd:dateTime">
   <xsd:pattern value="[1-9][0-9]{3}\-.+T[^\.]+(Z|[\+\-].+)"/>
</xsd:restriction>

我在使用这样的内容时遇到错误:2011-06-167T09:30:47.0Z或者这样:2011-06-16T09:30:47.0Z

请你帮我弄清楚我验证的日期时间有什么问题?


我不用RegEx控制XSD - 我所能做的就是让我的日期符合它。

谢谢!

2 个答案:

答案 0 :(得分:3)

[1-9][0-9]{3}-.+T[^.]+(Z|[+-].+)

(删除了不必要的转义)失败,因为您的测试字符串不符合正则表达式的规则:

[1-9][0-9]{3} # match a four-digit number > 999        : 2011 
-             # dash                                   :     -
.+            # one or more unspecified characters     :      06-167
T             # a T                                    :            T 
[^.]+         # one or more characters except dot      :             09:30:47
(             # followed by either                     :
 Z            # a Z                                    :                     ???
|             # or                                     :
 [+-]         # a plus or minus sign                   :                     ???
 .+           # and one or more unspecified characters :
)

您的测试字符串2011-06-167T09:30:47.0Z确实在Z之前包含一个点(并且没有允许替代匹配的加号/减号),因此正则表达式失败。

问题是:您需要遵循哪些规则?如何在您的应用程序中定义日期时间?

答案 1 :(得分:0)

你可以尝试非贪婪的匹配,或许可以解决它:

<xsd:pattern value="[1-9][0-9]{3}\-.+?T[^\.]+?(Z|[\+\-].+)"/>
随着?在+之后,它搜索可能的最小部分而不是最长的部分。

Futhermore我不确定这是否有效,如你所愿:

[^\.]

尝试不使用^

相关问题