2016-09-23 43 views
-2

我首先要感谢您花时间阅读我的问题。为这种类型的日期创建正则表达式

我想写一个正则表达式来检测日期的不同格式,我发现很多关于这个问题的问题,但没有一个符合我的要求。

这里是什么,我需要检测

16 SEPTEMBER 2016 
October 2016 
8/2016 
11/03/2016 

一些例子,这是代码,我开始与该位,我有种被卡住,不知道如何从这里下去。 我想要做的基本上是有元/ 1个多选项,例如一个月可以用文字或数字和年是一个什么93年或1993年

这里是我的代码

(\d\d)+]?.?(\d\d)?\w{3,9}?.(\d\d\d\d)?|(\d\d)? 

谢谢你提前多给你的回应!

+0

我不明白。你能向我们展示各种弦乐的例子吗?测试这在JavaScript中,是相同的PHP:'16 2016年9月2016年10月8/2016 11/03/2016'.match(/([0-9] +)([a-zA-Z] +)([0 -9] +)([a-zA-Z] +)([0-9] +)([0-9] +)\ /([0-9] +)([0-9] +)\ /([0-9] +)\ /([0-9] +)/) – Laurianti

+0

请参阅https://regex101.com/r/kU2xB5/1。它可能会匹配更多的日期格式比你需要,虽然:) –

回答

0

我不熟悉PHP,但由于PHP使用Perl的正则表达式功能的延伸,这里是从一个阵列打印出日期的Perl程序:

#!/usr/bin/perl 

@array = ('16 SEPTEMBER 2016', 'October 2016', '8/2016', '18/2016', '11/03/2016', 'NOT A DATE 3534'); 

for $date (@array){ 
    if($date =~ /^(\d{1,2} [A-Za-z]+ \d{4}$)|(^[A-Za-z]+ \d{4}$)|(^\d{1,2}\/\d{4}$)|(^\d{2}\/d{2}\/\d{4}$)/){ 
     print "$date\n"; 
    } 
} 

如果需要,你可以写一个稍微更复杂的程序,检查可接受的月份列表,而不是匹配任何字母串。

让我知道这是否有帮助。

+0

谢谢你irfan :)我upvoted你 – Alex