2015-11-05 104 views
0

我有一個變量$ data可能包含或不包含mysql時間戳。我想檢查它是否實際包含時間戳。Perl檢查一個字符串是否包含mysql時間戳

$data = '2015-11-21 13:45:20'; 

我可以使用正則表達式大像

/2[0-9][0-9][0-9]-(0[1-9]|1[0-2])-(0[1-9]|2[0-9]|3[0-1]) ([01][0-9]|2[0-4]):[0-5][0-9]:[0-5][0-9]/ 

但有一個更簡單的方法,它可能檢查?

+0

僅僅檢查粗糙結構是不夠的嗎?也許就像'/^\ d {4} - \ d {2} - \ d {2} \ d {2}:\ d {2}:\ d {2} $ /'? –

+0

它還能包含什麼? – choroba

+0

@MattJacob你可能會工作得很好。但是,我想知道是否有任何BIF。 –

回答

2

您可以使用Perl模塊DateTime :: Format :: MySQL。如果輸入格式不可接受,它的parse_datetime方法將引發異常,或者如果它可以被解析爲MySQL日期時間,將返回一個DateTime對象。它似乎相當嚴格,這可能是你想要的。

use strict; 
use warnings; 
use DateTime::Format::MySQL; 

while(<DATA>){ 
    chomp; 
    print "$_: "; 
    my $result = validate_date($_); 
    print defined $result 
     ? "Recognized format. ($result)\n" 
     : "Unrecognized format.\n"; 
} 

sub validate_date { 
    return eval {DateTime::Format::MySQL->parse_datetime(shift)}; 
} 

__DATA__ 
2015-11-21 13:45:20 
2015-11-21 13 : 45 : 20 

有了一個DateTime對象,特別是與日期時間::格式:: MySQL的模塊,它很容易轉身和輸出的MySQL就緒日期時間字符串。另一方面,如果目標是接受輸入,驗證它,然後發送給MySQL,則可以考慮使用DateTime :: Format :: DateParse中的方法parse_datetime來接受各種各樣的日期字符串儘可能。該模塊返回一個DateTime對象。然後,您可以使用DateTime :: Format :: MySQL方法format_datetime將該DT對象轉換爲有用的MySQL格式。這樣你就可以接受自由,但對你輸出的內容要嚴格,這往往是一種合理的設計模式。

相關問題