我正在寻找一些RegEx来为InfoPath 2010中的日期字段进行自定义模式验证。接受的日期格式为m / d / yyyy或mm / dd / yyyy。
尝试1:(\d{1,2})/(\d{1,2})/(\d{4})
尝试2:(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\d\d)
尝试1有更好的运气,而尝试2则没有多少。
答案 0 :(得分:4)
我一直在使用InfoPath 2010进行日期和时间验证问题,并且正则表达式模式匹配可能是一种有用的方法。验证m / d / yyyy的基本正则表达式(不适用于一个月中的特定日期并允许“0”前缀为月或日)将类似于以下(未经测试):
(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/\d{4}
对于更复杂的内容,您可以查看this SO answer。
但是,在InfoPath中,显示的日期格式可能与内部格式完全不同,正是您的正则表达式需要匹配的内部格式。如果您在表单上删除计算字段并将其设置为要验证的日期字段,您将看到如下内容:
2013-05-08T12:13:14
因此验证日期组件所需的正则表达式(再次忽略每月的特定日期)是:
\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])
但是这与示例日期不匹配,因为它没有考虑“T”之后的时间部分。因此,诀窍是使用表达式仅对日期子字符串执行匹配,例如在我的情况下,以下工作:
not(xdUtil:Match(substring-before(dfs:dataFields/my:SharePointListItem_RW/my:DateCreated, "T"), "\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])"))
答案 1 :(得分:0)
我尝试了以下内容并且有效:
\d{4}-\d{1,2}-\d{1,2}
正如大卫指出的那样,内部格式可能与显示的格式不同,因为当我尝试\d\d/\d\d/\d\d\d\d
时,即使它符合显示的日期格式,它也无法正常工作。
答案 2 :(得分:0)
我遇到了同样的问题。
我在日期字段上使用了一个规则来将另一个隐藏文本字段设置为
string(datefield).
总是出现YYYY-MM-DD,这对于创建一个正则表达式并不太难。我用过这个。
((19|20)\d\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])
请记住,它必须是一个XML Regex,它有一些限制。
然后我在隐藏字段上设置另一个规则来设置布尔值IsDateValid。