Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 年月日和年月日的正则表达式日期验证(InfoPath)_Regex_Forms_Sharepoint_Webforms_Infopath - Fatal编程技术网

Regex 年月日和年月日的正则表达式日期验证(InfoPath)

Regex 年月日和年月日的正则表达式日期验证(InfoPath),regex,forms,sharepoint,webforms,infopath,Regex,Forms,Sharepoint,Webforms,Infopath,我正在寻找一些正则表达式,用于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的运气更差。我在InfoPath 2010中遇到了一些日期和时间验证问题,正则表达式模式匹配可能是一种有用的方法。用于验证m/d/yyyy的基本

我正在寻找一些正则表达式,用于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的运气更差。

我在InfoPath 2010中遇到了一些日期和时间验证问题,正则表达式模式匹配可能是一种有用的方法。用于验证m/d/yyyy的基本正则表达式(不考虑一个月中的特定天数,也不考虑月或日的“0”前缀)如下所示(未测试):

你可以看看更复杂的东西

但是,在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])"))

我尝试了以下方法,效果很好:

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

正如David指出的,内部格式可能与显示的格式不同,因为当我尝试
\d\d/\d\d/\d\d\d
时,即使它符合日期的显示格式,也无法工作。

我也遇到了同样的问题

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

string(datefield).
这总是在YYYY-MM-DD中出现的,这对于创建正则表达式来说并不太难。我用了这个

((19|20)\d\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])
请记住,它必须是一个有一些限制的XML正则表达式


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

因此,如果尝试1有效,问题是什么?如果您希望验证日期是否为现有日期,则您不希望只验证正则表达式。输入1/1/2001时收到验证错误。不过,目前的日期起作用了。不确定2001年1月1日失败的原因。为了澄清,这是一个“日期可用”字段,将用于将来的日期。使用正则表达式表示实际日期可能会太麻烦。记住,并不是所有月份都有29-31天,所以您需要一个巨大的正则表达式来覆盖任何实际的可能性。
((19|20)\d\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])