2016-09-23 76 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