Pyinquirer不验证整数值

时间:2018-11-16 19:10:48

标签: python validation inquirer

我正在使用Py查询器@最新版本。 Python版本是3。 我设置了一个测试程序。只是基础知识,然后将其复制到项目docu

import inquirer
questions = [
  inquirer.Text('name', message="What's your name"),
  inquirer.Text('surname', message="What's your surname"),
  inquirer.Text('phone', message="What's your phone number",
                validate=lambda _, x: re.match('\+?\d[\d ]+\d', x),
                )
]
answers = inquirer.prompt(questions)

第一个和第二个问题有效,第三个问题有效,验证无效。 完全没有任何输入,我总是会收到以下错误:

"220" is not a valid phone. 

我在Google上搜索了很多(也许是错误的关键字),我试图更改正则表达式,但是没有帮助。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我对PyInquirer验证有问题:尽管格式不符合预期,但有时还是对输入进行了验证。因此,问题有所不同,但可能原因相似。

尝试将正则表达式\+?\d[\d ]+\d更改为^\+?\d[\d ]+\d$。这将匹配表达式的开头和结尾。

我希望它会有所帮助(我没有为inquirer测试它)

这里是我用PyInquirer测试的代码,以防万一:

from PyInquirer import prompt, Validator, ValidationError
from prompt_toolkit import document
import regex

class PhoneValidator(Validator):
    def validate(self, document: document.Document) -> None:
        ok = regex.match('^\+?\d[\d ]+\d$', document.text)
        if not ok:
            raise ValidationError(message = 'Please enter a valid phone number', cursor_position = len(document.text))

widget = [
    {
        'type':'input',
        'name':'number',
        'message':'Type your phone number',
        'validate':PhoneValidator
    }
]

try :
    result = prompt(widget)
except ValueError :
    print('Pb !!!')
    exit()

print('Your answer is')
print(result["number"])
print(type(result["number"]))