gpt4 book ai didi

javascript - Minimist 中的命令验证

转载 作者:行者123 更新时间:2023-11-28 00:48:55 29 4
gpt4 key购买 nike

新手Minimist命令解析器并面临问题。
用户输入命令:

Project -a   

我必须验证输入的命令是否有正确的选项。
所以我的代码如下:

var commands = ["project", "user"];
var commandEntered = require('minimist')(command.split(' '));
if(commands.indexOf(commandEntered._) > -1){
//i.e. Check if user has entered either project or user and then do following
if(commandEntered._ == "project") {
var options = ["a", "u", "l"];
delete commandEntered._;
var optionsEntered = Object.keys(commandEntered);
for(var i=0;i<optionsEntered.length;i++){
if(options.indexOf(optionsEntered) > -1){
if(optionsEntered == "a" && commandEntered.a == true)
{
console.log("Option a entered");
}
}
}
}
}
else{
return "Invalid Command";
}

我将如何验证命令中不需要的选项,或者说如果有命令:

 project -a -n <name>  

如何设置规则,告诉如果选项为“n”,则必须提供名称,并且如果存在选项“a”,则不能包含选项“l”。有什么办法可以解决这个问题吗?

提前致谢

最佳答案

这可以是简单或复杂的检查,具体取决于您的需要。

基本检查是否有“a”命令:

if (commandEntered.a) {
console.log('we have option a')
} else {
console.log("we don't have it")
}

检查不需要的选项(例如):

var validOptions = ['a', 'u', 'l'];
function isOptionPresent(opt) {
for (var i = 0; i<validOptions.length; i++) {
if (validOptions[i] == opt) {
return true
}
}
return false
}

for (var opt in commandEntered) {
if (!isOptionPresent(opt)) {
console.log('this command is not allowed')
console.log('use these commands: ' + validOptions)
}
}

另请注意,您可能想要更改线路(添加 [0]):

if(commands.indexOf(commandEntered._[0]) > -1){

如您在上一句中提到的复杂规则 - 如果简单,您可以逐一检查它们

if (commandEntered.a && !commandEntered.l) {
console.log('you have to provide L command with A command')
}
if (commandEntered.n && 'string' !== typeof(commandEntered.n)) {
console.log('command N must be followed with name of type string')
console.log('e.g. -n myname')
}

如果可以做得更好,使用对象而不是简单的数组,这也会定义参数的类型,这样你就不会重复太多(那么你就不需要 isOptionPresent() 函数):

var validOptions = {'a':'boolean', 'n':'string', 'l':'boolean'};
for (var opt in commandEntered) {
if (!validOptions[opt]) {
console.log('this command is not allowed')
console.log('use these commands: ' + Object.keys(validOptions))
}
}

if (commandEntered.n && validOptions[opt] !== typeof(commandEntered.n)) {
console.log('command N must be followed with name of type string')
console.log('e.g. -n myname')
}

如果有很多复杂的规则,最好考虑一些定义规则相互关系的结构,并检查传递的命令是否符合该结构。但我认为,这离你想要的太远了。

关于javascript - Minimist 中的命令验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021844/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com