我有以下内容:
<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 - 我所能做的就是让我的日期符合它。
谢谢!
答案 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我不确定这是否有效,如你所愿:
[^\.]
尝试不使用^