Sha*_*hah 5 javascript command-line-interface inquirer inquirerjs
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()
Run Code Online (Sandbox Code Playgroud)
考虑到上面的代码,我在类似这样的旧视频中注意到,如果您包含验证并且失败,输入将被清除。然而,就我而言,我得到的 NaN 不会自动清除。假设我启动应用程序并输入“abcdefg”:
? Please the number of players NaN
>> Please enter a valid whole number
Run Code Online (Sandbox Code Playgroud)
如果我输入任何内容,它只会添加到 NaN 的末尾。退格键和删除不会删除 NaN,但是如果我多次按向上箭头按钮直到不再显示以前的输入,它将被删除。难道我做错了什么?
确实很烦人,它不会清除输入,而且输入也会以某种方式被阻止。我解决这个问题的方法是使用一个验证函数来实现过滤器函数:
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)
},
})
Run Code Online (Sandbox Code Playgroud)
之后只需将其添加到您想要的查询中:
return inquirer.prompt([
{
name: 'amount',
message: 'Type a number please',
type: 'number',
...validateNumbers(),
},
])
Run Code Online (Sandbox Code Playgroud)
您还可以对此进行额外的验证:
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
}),
},
])
Run Code Online (Sandbox Code Playgroud)
然而,每当您传递一个引发验证错误的有效数字时,我也会陷入困境,但它仍然无法删除。您需要输入一些文本,然后它将被删除,因为这将使其变为 NaN
| 归档时间: |
|
| 查看次数: |
3243 次 |
| 最近记录: |