Проверка возраста 18+ с регулярными выражениями - PullRequest
0 голосов
/ 02 апреля 2020

Можете ли вы помочь мне, пожалуйста, сделать проверку возраста с регулярным выражением? Я не знаю, как рассчитать, если пользователю 18 или нет. Ввод: день рождения пользователя (в формате REGEX) Ввод: «добро пожаловать» или «возвращайся, когда тебе будет 18+»

Вот мой код для проверки правильности и плохости формата:

import re
import datetime
pattern = re.compile("^(0[1-9]|[12][0-9]|3[01])[- \/.,_](0[1-9]|1[012])[- \/.,_](19|20)\d\d")
dob = input('Enter your birthday (dd/mm/yyyy): ')
result = pattern.match(dob)
if pattern.match(dob):
    print("format is ok")
else:
    print("format is bad")

Заранее спасибо !!!

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Хорошо, у вас есть требование сделать это с помощью регулярного выражения. Имейте в виду, что это может привести к тому, что некоторые крайние случаи не будут охвачены!

import re
import datetime

pattern = re.compile("^(0[1-9]|[12][0-9]|3[01])[- \/.,_](0[1-9]|1[012])[- \/.,_](19|20)\d\d")

dob = input('Enter your birthday (dd/mm/yyyy): ')
result = pattern.match(dob)

if pattern.match(dob):
    print("format is ok")
else:
    print("format is bad")

Хорошо, регулярное выражение кажется допустимым (за исключением группы захвата за год. Вы можете использовать Regexr или аналогичные сервисы, если вам нужно его улучшить).

Затем вы можете деконструировать подходящие группы, чтобы получить день, месяц и год:

[day, month, year] = result.groups()  # As mentioned, year is currently either 19 or 20

Затем следующий шаг будет сравнить месяц с текущим месяцем. Это поможет решить, добавлять ли год или нет. В случае, если это будет тот же или соседний месяц, вы также можете посмотреть на эти дни.

Наконец, вычтите текущий год из введенного (после того, как вы зафиксировали группу захвата года) и сделать математику.

Поскольку это задание, я не буду предоставлять код для этого; -)

0 голосов
/ 02 апреля 2020

Вместо использования регулярных выражений просто попробуйте использовать входные данные для создания объекта datetime - если он работает, формат хороший, иначе ввод недопустим (см. Datetime.strptime (date_string, format)). Если у вас есть его и у вас есть datetime.now (), вы можете легко рассчитать возраст

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...