正規表現以上のものが必要です (少なくとも適切なソリューションを作成するには)。Perl での簡単なソリューションを示すサンプル プログラムを次に示します。
use warnings;
use strict;
my $time_min = '08:19:48';
my $time_max = '12:30:48';
while (1)
{
print "enter time: ";
chomp($_ = <STDIN>);
if (time_numeric($_) <= time_numeric($time_max) and
time_numeric($_) >= time_numeric($time_min))
{
print "$_ is between $time_min and $time_max\n";
}
else
{
print "$_ ain't between $time_min and $time_max\n";
}
}
sub time_numeric
{
if ($_[0] =~ /^(\d{1,2}):(\d{1,2}):(\d{1,2})$/)
{
return ($3 + $2 * 100 + $1 * 10000);
}
else
{
die "Invalid time!";
}
}
入力が実時間であると仮定するだけで、時間を検証する必要はありません。また、24 時間制のタイム スタンプでのみ機能します。
フィールドに先行ゼロがあるかどうかに関係なく、入力で機能します。
Perl で作業している場合は、この回答で示されているTime::Piece
ように、などのモジュールの使用も検討してください。