【发布时间】:2010-07-05 20:15:54
【问题描述】:
有没有办法编写一个正则表达式,它只能在一个日期时间字符串中验证一种类型的分隔符?
例如,30/04/2010 是正确的,但 30-04/2010 是不正确的。
我用谷歌搜索了一些关于回溯的信息,但我不太确定如何使用它。例如,如果我有这个正则表达式:
(?P<date>((31(?![\.\-\/\—\ \,\–\-]{1,2}(Feb(ruary)?|Apr(il)?|June?|(Sep(?=\b|t)t?|Nov)(ember)?)))|((30|29)(?![\.\-\/\—\ \,\–\-]{1,2}Feb(ruary)?))|(29(?=[\.\-\/\—\ \,\–\-]{1,2}Feb(ruary)?[\.\-\/\—\ \,\–\-]{1,2}(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)))))|(0?[1-9])|1\d|2[0-8])[\.\-\/\—\ \,\–\-]{1,2}(Jan(uary)?|Feb(ruary)?|Ma(r(ch)?|y)|Apr(il)?|Ju((ly?)|(ne?))|Aug(ust)?|Oct(ober)?|(Sep(?=\b|t)t?|Nov|Dec)(ember)?)[\.\-\/\—\ \,\–\-]{1,2}((1[6-9]|[2-9]\d)\d{2}))
那我应该如何在这里使用回溯?
非常感谢。
【问题讨论】:
-
您为什么要这样做?让您的用户以任何可以理解的方式输入日期。 “30-04/2010”显然是2010年第30个月的第4天,所以你应该接受它。 ;-) 帮助用户,不要与她对抗。
-
假设我们有这个字符串 09/07-10/12。我希望正则表达式匹配 09/07 和 10/12 作为两个日期。否则,09/07-10 可能会被误认为是一个日期。
标签: php regex datetime date delimiter