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