我正在使用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上搜索了很多(也许是错误的关键字),我试图更改正则表达式,但是没有帮助。
有人可以帮助我吗?
答案 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"]))