新手到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‘。我有什么办法可以解决这个问题吗?
提前感谢
发布于 2014-11-21 19:36:31
这可以是简单的检查,也可以是复杂的检查,具体取决于您的需要。
基本检查是否有'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)
}
}另请注意,您可能希望更改行(添加):
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')
}如果可以做得更好,使用object而不是简单的数组,它也会定义参数的类型,所以你不会重复太多(然后你就不需要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')
}如果有许多复杂的规则,最好考虑一些结构来定义规则之间的关系,并检查传递的命令是否符合该结构。但我认为,这离你想要的太远了。
https://stackoverflow.com/questions/27021844
复制相似问题