0

我正在使用 Py 查询器@最新版本。Python版本是3。我设置了一个测试程序。只是基础知识并从项目文档中复制粘贴

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. 

我搜索了很多(可能是错误的关键字),我试图更改正则表达式,但没有任何帮助。

有人能帮我吗 ?

4

1 回答 1

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"]))                                            
于 2019-05-12T08:14:57.693 回答