Регулярное выражение для определения лет до 1000 г. н.э. и после 2000 г.н.э.

#php #regex

#php #регулярное выражение

Вопрос:

Я пишу веб-приложение для семейного древа, и мне нужно проверить ввод значения для лет рождения и смерти. Они могут иметь префикс «~», «>» или «<«, означающий «около», «после» и «до».

 '~1935' 
'>1820'
'<982'
 

Сам год может быть от до 1000 г. н.э. до после 2000 г. н.э., поэтому может содержать 3 или 4 цифры. Мне нужно регулярное выражение для проверки ввода пользователем.

Я пробовал, но недостаточно знаком с регулярным выражением, чтобы придумать правильную последовательность. Как мне решить эту проблему?

Ответ №1:

Вы можете использовать это регулярное выражение:

 ^[~><]?(d{3,4})$
 

Он ищет необязательный ~ < или > в начале строки, за которым следуют 3 или 4 цифры, а затем конец строки.

Пример использования:

 $dates = array('~1935', '>1820', '<982', '2013', '3045', '123');
foreach ($dates as $date) {
    if (preg_match('/^[~><]?(d{3,4})$/', $date, $matches) amp;amp; $matches[1] <= date('Y'))
        echo "$date is validn";
    else
        echo "$date is not validn";
}
 

Вывод:

 ~1935 is valid 
>1820 is valid 
<982 is valid 
2013 is valid 
3045 is not valid
123 is valid
 

Демонстрация на 3v4l.org

Комментарии:

1. Спасибо, Ник. Я просто заменил ‘<= date(«Y»)’ для теста $matches[1], и он отлично работает.

2. @JohnEmerson Я не был уверен, захотите ли вы эту проверку, поэтому упростил ее. Использование <= date('Y') — это, безусловно, правильный путь.