1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
# -*- coding: utf-8 -*-
"""Example for a text question type.
Run example by typing `python -m examples.text` in your console."""
import re
from pprint import pprint
import questionary
from examples import custom_style_dope
from questionary import ValidationError
from questionary import Validator
from questionary import prompt
class PhoneNumberValidator(Validator):
def validate(self, document):
ok = re.match(
r"^([01])?[-.\s]?\(?(\d{3})\)?"
r"[-.\s]?(\d{3})[-.\s]?(\d{4})\s?"
r"((?:#|ext\.?\s?|x\.?\s?)(?:\d+)?)?$",
document.text,
)
if not ok:
raise ValidationError(
message="Please enter a valid phone number",
cursor_position=len(document.text),
) # Move cursor to end
def ask_pystyle(**kwargs):
# create the question object
question = questionary.text(
"What's your phone number",
validate=PhoneNumberValidator,
style=custom_style_dope,
**kwargs,
)
# prompt the user for an answer
return question.ask()
def ask_dictstyle(**kwargs):
questions = [
{
"type": "text",
"name": "phone",
"message": "What's your phone number",
"validate": PhoneNumberValidator,
}
]
return prompt(questions, style=custom_style_dope, **kwargs)
if __name__ == "__main__":
pprint(ask_pystyle())
|