wyrażenie regularne

0

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
[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

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)[email protected]';

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])[email protected]';
            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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0