Проверка вводимых данных в Python с помощью модуля PyInputPlus

В этой статье я расскажу о том, как проверить вводимые пользователем данные в python с помощью модуля PyInputPlus.

Введение

Валидация ввода — это проверка правильности формата вводимого пользователем значения, т.е. если пользователь должен указать email, то код не должен принимать ничего, кроме email. Неправильная проверка ввода приведет к ошибкам и уязвимостям в системе.

PyInputPlus — это python-модуль, созданный А. И. Свейгартом, который принимает пользовательский ввод и проверяет, является ли он корректным. Если ввод недействителен, он будет продолжать запрашивать ввод до тех пор, пока не будет получен правильный ввод. PyInputplus имеет такие функции, как inputStr(), inputInt(), InputDate() и другие, которые используются при проверке ввода пользователя.

Установка

Для установки модуля введите в терминале команду ниже:

pip install --user pyinputplus
Войти в полноэкранный режим Выйти из полноэкранного режима

Чтобы использовать модуль в своем коде, добавьте в начало кода следующую команду:

import pyinputplus as pyip
Enter fullscreen mode Выйти из полноэкранного режима

Pyinputplus — это длинное название, поэтому мы используем pyip, чтобы сэкономить время.

Функции в PyInputPlus

1. inputNum()

Эта функция принимает от пользователя только целые числа и числа с плавающей точкой.

>>> import pyinputplus as pyip
>>> result = pyip.inputNum()
who
'who' is not a number.
22
>>> result
22
Вход в полноэкранный режим Выход из полноэкранного режима
>>> result = pyip.inputNum()
22.4
>>> result
22.4
Войти в полноэкранный режим Выход из полноэкранного режима

Из приведенных фрагментов видно, что ‘who’ отклоняется, так как является строкой, в то время как 22.4 и 22 принимаются, так как являются значениями с плавающей точкой и целыми числами соответственно.

2. inputInt()

Эта функция принимает только целые значения и отклоняет значения с плавающей точкой и строки.

>>> import pyinputplus as pyip
>>> result = pyip.inputInt()
mike
'mike' is not an integer.
22.4
'22.4' is not an integer.
30
>>> result
30
Вход в полноэкранный режим Выход из полноэкранного режима

Из приведенного выше фрагмента ‘mike’ будет отклонено, потому что это строка, а ‘22.4’ будет отклонено, потому что это значение с плавающей точкой.

3. inputStr()

Эта функция похожа на функцию input(), но имеет особенности функций PyInputPlus.

>>> import pyinputplus as pyip
>>> result = pyip.inputStr()
34
>>> result
'34'
>>> result = pyip.inputStr()
mike
>>> result
'mike'
>>> result = pyip.inputStr()
22.4
>>> result
'22.4'
Вход в полноэкранный режим Выход из полноэкранного режима

В приведенном выше фрагменте видно, что в качестве входных данных принимаются целые числа, строки и числа с плавающей точкой, но возвращаются в виде строк.

4. inputChoice()

Эта функция предоставляет пользователям список вариантов, из которых можно выбирать, и принимает только один из них.

>>> import pyinputplus as pyip
>>> result = pyip.inputChoice(['bee','dog','sheep'])
Please select one of: bee, dog, sheep
mike
'mike' is not a valid choice.
Please select one of: bee, dog, sheep
12
'12' is not a valid choice.
Please select one of: bee, dog, sheep
dog
>>> result
'dog'
Войти в полноэкранный режим Выход из полноэкранного режима

Из приведенного выше фрагмента ‘mike’ и ’12’ отклонены, поскольку их нет в списке, предоставленном в качестве аргумента. Вы можете предоставить список или кортеж в качестве аргумента в функции.

5. inputMenu()

Работает так же, как и функция inputChoice, но предоставляет пронумерованное меню, из которого пользователь должен сделать выбор.

>>> import pyinputplus as pyip
>>> result = pyip.inputMenu(['bee','dog','sheep'])
Please select one of the following:
* bee
* dog
* sheep
cow
'cow' is not a valid choice.
Please select one of the following:
* bee
* dog
* sheep
12
'12' is not a valid choice.
Please select one of the following:
* bee
* dog
* sheep
bee
>>> result
'bee'
Вход в полноэкранный режим Выйти из полноэкранного режима

В приведенном выше фрагменте пользователю предоставляется меню, из которого он должен выбрать один пункт. ’12’ и ‘корова’ отклоняются, так как их нет в списке, в то время как ‘собака’ принимается в качестве ввода.

>>> result = pyip.inputMenu(['bee','dog','sheep'], numbered=True)
Please select one of the following:
1. bee
2. dog
3. sheep
2
>>> result
'dog'
Вход в полноэкранный режим Выход из полноэкранного режима

Установка параметра numbered в true нумерует пункты меню, и вы можете выбрать пункт, указав соответствующий номер. Вместо списка в качестве аргумента можно также указать кортеж.

6. inputDatetime(), inputDate() и inputTime()

Эти функции обеспечивают ввод пользователем только даты, времени или и того, и другого.

>>> import pyinputplus as pyip
>>> result = pyip.inputTime()
12
'12' is not a valid time.
ss
'ss' is not a valid time.
12:00
>>> str(result)
'12:00:00'
Вход в полноэкранный режим Выход из полноэкранного режима

В приведенном выше фрагменте функция inputTime() принимает только время в формате часы, минуты, секунды, разделенные двоеточиями. Ввод в функцию str() для изменения в строку. ’12’ и ‘ss’ отвергаются, так как они не в правильном формате.

>>> result = pyip.inputDate()
12121212
'12121212' is not a valid date.
ww
'ww' is not a valid date.
12/12/2020
>>> str(result)
'2020-12-12'
Вход в полноэкранный режим Выход из полноэкранного режима

В приведенном выше фрагменте только даты в формате день, месяц, год, разделенные переадресующими косыми чертами, принимаются в качестве допустимого пользовательского ввода.

>>> result = pyip.inputDatetime()
12:00 12/12/2020
'12:00 12/12/2020' is not a valid date and time.
12/12/2020
'12/12/2020' is not a valid date and time.
12:00
'12:00' is not a valid date and time.
12/12/2020 12:00
>>> str(result)
'2020-12-12 12:00:00'
Войти в полноэкранный режим Выход из полноэкранного режима

В приведенном выше фрагменте единственным допустимым вводом является дата, за которой следует время, если поменять дату на противоположную, ввод будет отклонен. Только дата или только время будут отклонены.

7. inputFloat()

Эта функция принимает только значения с плавающей точкой как единственный допустимый пользовательский ввод.

8. inputPassword()

В этой функции, когда пользователь вводит данные, на экран выводятся символы *, чтобы гарантировать, что конфиденциальная информация, такая как пароли, не будет выведена на экран.

9. inputYesNo()

В этой функции в качестве допустимого ввода принимаются только Да и Нет.

10. inputBool()

В этой функции только «True» или «False» принимаются к вводу пользователем.

11. inputFilepath()

Эта функция гарантирует, что пользователь вводит только путь к файлу и имя файла.

12. inputEmail()

Эта функция принимает только действительные адреса электронной почты в качестве пользовательского ввода.

13. inputCustom()

С помощью этой функции вы можете создать свою логику валидации, передав функцию в качестве аргумента этой функции.

14. help()

Помогает получить дополнительную информацию о других функциях pyinputplus. В качестве аргумента передается имя функции.

Общие параметры функций PyInputPlus

параметры min/max/greaterThan/lessThan

Эти параметры используются в функциях inputNum(), inputInt() и inputFloat(). Они помогают определить диапазон принимаемых значений пользовательского ввода.

параметр prompt

Текст, который будет отображаться перед запросом пользователя на ввод.

>>> import pyinputplus as pyip
>>> response = pyip.inputInt(prompt='Enter your age:')
Enter your age:23
>>> response
23
Вход в полноэкранный режим Выход из полноэкранного режима

параметр blank

Если параметр установлен в True, пользователю не нужно ничего вводить в качестве ввода. По умолчанию параметр blank имеет значение False.

параметры limit, timeout и default

Параметр limit определяет количество попыток ввода, которое дается пользователю, после чего возникает исключение pyinputplus.RetryLimitException, если количество попыток было превышено, а правильный ввод не был произведен.

>>> import pyinputplus as pyip
>>> response = pyip.inputInt(limit=3)
rr
'rr' is not an integer.
rr
'rr' is not an integer.
rr
'rr' is not an integer.
Traceback (most recent call last):
    --snip---
    raise limitOrTimeoutException
pyinputplus.RetryLimitException
Войти в полноэкранный режим Выход из полноэкранного режима

Параметр timeout указывает, сколько секунд ждать ввода пользователя, прежде чем вызвать исключение pyinputplus.TimeoutException.

>>> import pyinputplus as pyip
>>> response = pyip.inputInt(timeout=5)
23
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
   --snip--
    raise TimeoutException()
pyinputplus.TimeoutException
Войти в полноэкранный режим Выход из полноэкранного режима

Когда вы передаете значение параметру по умолчанию, значение будет возвращено вместо того, чтобы вызвать исключение.

Параметры allowRegexes и blockRegexes

Параметр AllowRegexes принимает регулярное выражение, определяющее, какой ввод должен быть разрешен. Параметр blockregexes принимает регекс, определяющий, какой пользовательский ввод не должен приниматься. Параметр может принимать список символов.

>>> result = pyip.inputStr(allowRegexes=[r'^fo.*'])
Войти в полноэкранный режим Выход из полноэкранного режима
>>> result = pyip.inputStr(blockRegexes=[r'.*s$'])
Войти в полноэкранный режим Выход из полноэкранного режима

Заключение

Помимо перечисленных выше функций и параметров, другие можно найти в официальной документации.
Как видно, PyInputPlus делает работу по проверке пользовательского ввода очень простой и легкой.

Спасибо за прочтение.

Оцените статью
Procodings.ru
Добавить комментарий