Szukam dat w tekście za pomocą pattern i matcher w formacie YYYY-MM-DD. Nie wiem tylko jak zrobić ograniczenie, aby nie grupować błędnych dat, które mają zapisaną trzycyfrową liczbę na dniach np. 2009-12-111
0
0
pabloxs napisał(a):
Szukam dat w tekście za pomocą pattern i matcher w formacie YYYY-MM-DD. Nie wiem tylko jak zrobić ograniczenie, aby nie grupować błędnych dat, które mają zapisaną trzycyfrową liczbę na dniach np. 2009-12-111
^\d{4}-\d{2}-\d{2}$
1
Może to pomoże: http://www.baeldung.com/java-date-regular-expressions
1
regexy to nie jest zbyt dobry util do sprawdzania poprawnosci dat, lepiej uzyc jakiejs klasy w stylu SimpleDateFormat
czy czego tam sie w javie teraz uzywa.
0
.two {
font-weight:700;
text-shadow:blue 2px 2px 2px;
}
.one {
text-shadow:orange 2px 2px 2px;
font-weight:bold;
}
<?php
$pattern = '@^(?:201[0-8]|200[0-9]|[0-1][0-9][0-9][0-9])-(?:0[1-9]|10|11|12)-(?:0[1-9]|1[0-9]|2[0-9]|30|31)$@';
for($i=2000;$i<=2018;$i++) {
$tmp = [$i.'-'.'0'.rand(1,9).'-'.'0'.rand(1,9),$i.'-'.'1'.rand(1,9).'-'.'2'.rand(1,9)];
$subject = $tmp[rand(0,1)];
$int = preg_match($pattern,$subject,$matches);
if($int==1) {
$split = explode('-',$matches[0]);
if($split[0]%4==0 && $split[0]%100!=0 || $split[0]%400==0 && $split[1]=='02') {
//echo 'This is Leap Year';
$pattern2 = '@^(?:0[1-9]|1[0-9]|2[0-9])$@';
if(preg_match($pattern2,$split[2])==1) {
$success = 'Successfully';
}else {
$success = 'Not Successfylly0';
}
}else {
//echo 'This isn\'t Leap Year';
$success = 'Successfully2';
}
}else{
$success = 'Not Successfully';
}
if(isset($matches[0])){
echo $matches[0].'<span style="color:green" class="one"> '.$success.'</span><br />';
}else {
echo $subject.'<span style="color:orange" class="two">'.$success.'</span><br />';
}
}
Nie wiem za bardzo, czy tak powinno się pisać sprawdzanie daty razem z regexp'ami, ale niech już będzie.