如何在PHP中验证格式为d.m.Y-d.m.Y的日期范围

如何在PHP中验证格式为d.m.Y-d.m.Y的日期范围,php,regex,date-range,Php,Regex,Date Range,我的字符串总是这样: 04.01.2018 - 20.01.2018 所以模式是:d.m.Y-d.m.Y 我想REGEX会是第一选择。评论说不要使用正则表达式 对如何验证它有什么建议吗?Regex绝对不是正确的方法。拆分字符串,并使用基于日期的方法验证每个日期 代码:() 输出: (04.01.2018 - 20.01.2018}) valiDate: valid -VS- regex: valid (01.01.2017 - 01.02.201s}) valiDate: bonk

我的字符串总是这样:

04.01.2018 - 20.01.2018
所以模式是:
d.m.Y-d.m.Y

我想REGEX会是第一选择。评论说不要使用正则表达式


对如何验证它有什么建议吗?

Regex绝对不是正确的方法。拆分字符串,并使用基于日期的方法验证每个日期

代码:()

输出:

(04.01.2018 - 20.01.2018}) valiDate: valid  -VS-    regex: valid
(01.01.2017 - 01.02.201s}) valiDate: bonk   -VS-    regex: bonk
(00.00.0000 - 99.99.9999}) valiDate: bonk   -VS-    regex: valid
(fish                   }) valiDate: bonk   -VS-    regex: bonk
(31.02.2018 - 31.03.2019}) valiDate: bonk   -VS-    regex: valid
(12.13.2016 - 12.14.2016}) valiDate: bonk   -VS-    regex: valid
(04.04.2018 - 04.04.2017}) valiDate: valid  -VS-    regex: valid

p、 我添加了
isset()
调用,以避免在
explode()

未生成两个元素时发出通知。是否要验证它们是否仅为数字?不使用正则表达式。正则表达式对于数字范围来说非常笨拙,对于需要复杂相关验证(一个月内的最大天数等)的日期来说更是如此。@Thefourthbird如果给定的字符串与此模式匹配,则您没有指定“此模式”的确切含义。@Terminus您选择的答案不会验证日期范围。这些日期可能根本不是有效日期。它们的顺序可能相反;这有关系吗?如果您需要真正的验证,请不要使用正则表达式(正如梅尔早些时候所说的)。请解释您的任务/项目的验证要求有多严格——我只能假设它需要比公认的答案更严格。当然,您甚至可以添加一个简单的DateTime实例比较来检查范围是否有效。
(04.01.2018 - 20.01.2018}) valiDate: valid  -VS-    regex: valid
(01.01.2017 - 01.02.201s}) valiDate: bonk   -VS-    regex: bonk
(00.00.0000 - 99.99.9999}) valiDate: bonk   -VS-    regex: valid
(fish                   }) valiDate: bonk   -VS-    regex: bonk
(31.02.2018 - 31.03.2019}) valiDate: bonk   -VS-    regex: valid
(12.13.2016 - 12.14.2016}) valiDate: bonk   -VS-    regex: valid
(04.04.2018 - 04.04.2017}) valiDate: valid  -VS-    regex: valid