我一直在想一个问题,陷入困境,应该如何验证给定的字符串输入。这是原始问题
我认为我的方法还可以,但我现在只能做些什么。
到目前为止,这是我的尝试:
const solution =(S)=>{
let validParams = {
'--count': '--count',
'--name': '--name',
'--help': '--help'
}
let strToTest;
for(k of validParams){
switch (S.includes(k)) {
case '--help':
return 1
case '--count':
strToTest = parseInt(S.replace(/--count/g,''))
return countValidator(strToTest);
case '--name':
strToTest = S.replace(/--count/g,'')
return nameValidator(strToTest);
default:
return 1
}
}
}
const countValidator = (num) =>{
if(num > 10 && num < 100){
return 0
}
}
const nameValidator = (str) =>{
if(str.length > 3 && str.length < 10){
return 0
}
}
这也是我看到的测试用例:
solution('--count g') // -1
solution('-help name') // -1
solution('--name SOME_NAME --COUNT 10') // 0
solution('--count 44') // 0
答案 0 :(得分:1)
您需要先将输入分成单词,然后测试数组元素。
如果验证器成功,则无法立即返回结果,因为您必须不断测试其他参数。
function solution(S) {
let params = S.split(/\s+/).map(str => str.toLowerCase()); // \s+ matches any amount of whitespace between parameters
let result = 0;
if (params.includes('--help')) {
result = 1;
}
for (let i = 0; i < params.length; i++) {
switch (params[i]) {
case "--help":
break;
case "--count":
i++;
if (i > params.length) {
result--;
return result;
}
let n = parseInt(params[i]);
if (isNaN(n) || n < 10 || n > 100) {
result--;
return result;
}
break;
case "--name":
i++;
if (i > params.length) {
result--;
return result;
}
let str = params[i];
if (str.length < 3 || str.length > 10) {
result--;
return result;
}
break;
default:
result--;
return result;
}
}
return result;
}
console.log(solution('--count g')); // -1
console.log(solution('-help name')); // -1
console.log(solution('--name SOME_NAME --COUNT 10')); // 0
console.log(solution('--count 44')) // 0