#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
Комментарии:
1. Спасибо, Ник. Я просто заменил ‘<= date(«Y»)’ для теста $matches[1], и он отлично работает.
2. @JohnEmerson Я не был уверен, захотите ли вы эту проверку, поэтому упростил ее. Использование
<= date('Y')
— это, безусловно, правильный путь.