Как правильно составить регулярки?

Друзья, подскажите, пожалуйста, как правильно записать регулярку?
есть три варианта даты:
2016-00-00
2015-10-00
2015-12-23
пишу регулярки, чтобы определить, какая дата попадается в цикле:
if (preg_match('/^([0-9]?[1-9]+)-([0-9]?[1-9]+)-([1-9]+)$/', $reldate)) {
echo "555 - ".$reldate."<br />";
} elseif (preg_match('/^([0-9]?[1-9]+)-([0-9]?[1-9]+)-00$/', $reldate)) {
echo "777 - ".$reldate."<br />";
}

Но регулярки не работаю.. Я так понимаю из-за того, что каждое множество внутри скобок имеет абсолютную позицию? т.е. ([0-9]?[1-9]+) не true, при 10, но будет true, при 01-09 или 1-9?
Как убрать правило позиций в регулярках?
Или может быть есть лучше решение? Мне нужно проверить каждые скобки "(год)-(месяц)-(день)" на наличие цифры больше 0...
Заранее большое спасибо!
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 4
Ну что бы он их увидел (даты) работает так https://regex101.com/r/gI6vG8/3 что бы больше нуля не понял, в дате года же обязательно есть ноль...
Ответ написан
@tplus
[1-9]\d{3,}-[1-9]\d{1}-[1-9]\d{1}

Про больше нуля тоже не понял. Если нужно, чтобы не было 0 в начале ГМД, тогда так: https://regex101.com/r/kA2jF8/1
Ответ написан
prototype_denis
@prototype_denis
Symfony
$date = '2016-00-00';
if (strtotime($date) > 0) {   
    // 2016-00-00 => 2015-11-30
    
    if (preg_match('/(0000|00)/', $date)) {
        // 2016-00-01 || 0000-00
    } else {
        // 2016-01-01
    }
} else {
    // 2016-sss-01 || 99999999999999999999999999-01-01
}


$date   = '2015-11-31';

$parts  = explode('-', $date);
if ($isValid = strtotime($date)) {
    $isValid = ($parts === array_map(function($part) {
        return ($part > 0 ? $part : false);
    }, $parts));
}

if ($isValid) {
    // ...
} else {
    // ...
}
Ответ написан
Комментировать
@nnnice
Чтобы работать с регулярными выражениями, используйте специальные сервисы, которые не только "подчеркивают" ошибки, но и помогают разобраться, что не так. Там и примеры есть в этих сервисах в качестве небольших шпаргалок для начинающих, и поддержка самых разных ЯП. Самая популярная штука, это regex101, конечно. Поддерживает PHP, JavaScript, Golang и Python + есть генератор кода с поддержкой C#, Java, Ruby, Rust, Perl. RegexPlanet, из российских можно Planetcalc поклацать. Ссылки на эти и прочие беру отсюда:регулярные выражения и все о них собрано в одном месте. Будут вопросы - пишите, на все отвечу и разобраться в сервисах помогу. Удачи!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы