Javascript Minimist中的命令验证

Javascript Minimist中的命令验证,javascript,validation,command-line,command,sails.js,Javascript,Validation,Command Line,Command,Sails.js,新手在命令解析器时遇到问题。 用户输入一个命令: Project -a 我必须验证输入的命令是否有正确的选项。 因此,我的代码如下: var commands = ["project", "user"]; var commandEntered = require('minimist')(command.split(' ')); if(commands.indexOf(commandEntered._) > -1){ //i.e. Check if user has en

新手在命令解析器时遇到问题。
用户输入一个命令:

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";
}  
var命令=[“项目”,“用户”];
var commandEntered=require('minimist')(command.split('');
if(commands.indexOf(commandEntered.\ux)>-1){
//i、 e.检查用户是否输入了项目或用户,然后执行以下操作
if(commandEntered.==“项目”){
var期权=[“a”、“u”、“l”];
删除输入的命令;
var options输入=Object.keys(commandEntered);
对于(变量i=0;i-1){
如果(选项输入==“a”&&commandEntered.a==true)
{
控制台日志(“输入选项a”);
} 
}
}
}
}  
否则{
返回“无效命令”;
}  
如何验证命令中不需要的选项,或者说是否有命令:

 project -a -n <name>  
project-a-n
我如何设置规则,告知如果选项为“n”,则必须提供名称,如果存在选项“a”,则不能包括选项“l”。我有办法解决这个问题吗


提前感谢

根据您的需要,这可以是简单的检查,也可以是复杂的检查

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

if (commandEntered.a) {
  console.log('we have option a')
} else {
  console.log("we don't have it")
}
检查不需要的选项(例如):

正如你在上一句中提到的,复杂的规则——如果简单的话,你可以逐个检查它们

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')
}
如果可以更好地使用object而不是simple array,它还将定义参数的类型,这样您就不会重复太多(这样您就不需要isOptionPresent()函数):

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

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')
}
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')
}