4

我正在寻找一些 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 的运气并不好。

4

3 回答 3

4

我在 InfoPath 2010 中遇到了一些日期和时间验证问题,正则表达式模式匹配可能是一种有用的方法。用于验证 m/d/yyyy 的基本正则表达式(不考虑一个月中的特定日期并允许在月份或日期前加上 '0' 前缀)将类似于以下内容(未经测试):

(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/\d{4}

对于更复杂的东西,你可以看看这个 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])"))
于 2013-05-09T03:21:28.800 回答
0

我有同样的问题。

我在日期字段上使用规则将另一个隐藏文本字段设置为

string(datefield).

那总是出现 YYYY-MM-DD ,创建正则表达式并不难。我用过这个。

((19|20)\d\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])

请记住,它必须是具有一些限制的 XML 正则表达式。

然后我在隐藏字段上设置另一个规则来设置布尔 IsDateValid。

于 2017-10-20T01:27:40.487 回答
0

我尝试了以下方法并且成功了:

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

正如大卫指出的那样,内部格式可能与显示的格式不同,因为当我尝试\d\d/\d\d/\d\d\d\d它时它不起作用,即使它符合日期的显示格式。

于 2017-07-18T10:29:14.193 回答