我有一個變量$ 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]/
但有一個更簡單的方法,它可能檢查?
我有一個變量$ 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]/
但有一個更簡單的方法,它可能檢查?
您可以使用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格式。這樣你就可以接受自由,但對你輸出的內容要嚴格,這往往是一種合理的設計模式。
僅僅檢查粗糙結構是不夠的嗎?也許就像'/^\ d {4} - \ d {2} - \ d {2} \ d {2}:\ d {2}:\ d {2} $ /'? –
它還能包含什麼? – choroba
@MattJacob你可能會工作得很好。但是,我想知道是否有任何BIF。 –