M / D / YYYY和MM / DD / YYYY(InfoPath)的RegEx日期验证

时间:2013-04-11 18:21:08

标签: regex forms sharepoint webforms infopath

我正在寻找一些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则没有多少。

3 个答案:

答案 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。