2013-04-11 58 views
2

我正在寻找一些RegEx,用于InfoPath 2010中日期字段的自定义模式验证。接受的日期格式是m/d/yyyy或mm/dd/yyyy。M/D/YYYY和MM/DD/YYYY(InfoPath)的RegEx日期验证

尝试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

所以,如果尝试1工作,有什么问题? – 2013-04-11 18:24:20

+0

如果你想验证日期是一个现有的日期,只是一个正则表达式不是你要找的。 – djjeck 2013-04-11 18:26:34

+0

当我输入1/1/2001时收到验证错误。尽管目前的日期有效。不知道为什么1/1/2001失败。 – manh2244 2013-04-11 18:27:24

回答

3

我一直有一些日期和时间验证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])")) 
0

我尝试了以下内容和它的工作:

\d{4}-\d{1,2}-\d{1,2} 

正如David指出,一个比显示,因为当我试图\d\d/\d\d/\d\d\d\d它没的内部格式可能不同尽管迎合日期的显示格式,它仍然行不通。

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。