首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清除Inquirer.js中的错误输入

如何清除Inquirer.js中的错误输入
EN

Stack Overflow用户
提问于 2020-07-09 00:06:32
回答 2查看 1K关注 0票数 2
代码语言:javascript
复制
const inquirer = require("inquirer")

var questions = [
  {
    type: "number",
    name: "name",
    message: "Please the number of players",
    validate: function (name) {
      var valid = Number.isInteger(name)
      return valid || `Please enter a valid whole number`
    },
  },
]

function promptUser() {
  inquirer
    .prompt(questions)
    .then((answers) => {
      console.log(`You entered ${answers["name"]}!`)
    })
    .catch((error) => console.log(`Please enter a number`))
}

promptUser()

考虑到上面的代码,我在像this这样的老视频中注意到,如果你包含了validate,但它失败了,输入将被清除。然而,在我的例子中,我得到的NaN不是自动清除的。假设我启动应用程序并输入'abcdefg':

代码语言:javascript
复制
? Please the number of players NaN
>> Please enter a valid whole number

如果我键入任何内容,它就会被添加到NaN的末尾。Backspace和delete不会删除NaN,但是如果我多次按向上箭头按钮,直到没有以前的输入出现,它就会被删除。我做错了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2020-08-24 21:45:40

这真的很烦人,它不会清除输入,而且输入也会以某种方式被阻塞。我解决这个问题的方法是使用一个验证函数,它也实现了filter函数:

代码语言:javascript
复制
const validateNumbers = moreValidationChecks => ({
    validate: input => {
        if (input === '') {
            return 'Please provide a valid number greater then 0'
        }
        return moreValidationChecks ? moreValidationChecks(input) : true
    },
    filter: input => {
        // clear the invalid input
        return Number.isNaN(input) || Number(input) <= 0 ? '' : Number(input)
    },
})

在此之后,只需将以下内容添加到所需的查询中:

代码语言:javascript
复制
return inquirer.prompt([
    {
        name: 'amount',
        message: 'Type a number please',
        type: 'number',
        ...validateNumbers(),
    },
])

您还可以将额外的验证传递给以下内容:

代码语言:javascript
复制
   return inquirer.prompt([
        {
            name: 'amount',
            message: 'Type a number please',
            type: 'number',
            ...validateNumbers(input => {
                if (Number(input) < 10)) {
                    return "This must be less then 10"
                }
                return true
            }),
        },
    ])

然而,每当你传递一个抛出验证错误的有效数字时,我也被卡住了,它仍然无法删除。您需要键入一些文本,然后它将被删除,因为这将使其成为NaN

票数 1
EN

Stack Overflow用户

发布于 2020-11-30 03:08:26

我发现将类型从number更改为input是可行的。下面是我使用的提示符的一个示例。

代码语言:javascript
复制
{
    type: "input",
    message: "Please enter id:",
    name: "id",
    validate: (answer) => {
      if (isNaN(answer)) {
        return "please enter a number";
      }
      return true;
    },
  },
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62798907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档