我正在尝试通过使用对象检查有效参数和可接受值(白名单)来验证 URL 链接。
const validParams = {
"brand",
"item",
"size",
"country"
}
const validBrandValues = {
"nike",
"adidas",
"puma",
...
}
export const Validate = (link) => {
const urltest = "https://example.com/?brand=nike%20adidas%20puma%20cat&item=trainers%20jackets%20socks&random=hello"
var url = "";
try {
url = decodeURI(urltest);
} catch (e) {
console.error(e);
}
const params = url.split("?");
const value = params[1].split("&").map(item => item.split("="));
console.log(value)
//for(int i = 0; i < value.length; i++){
//if(value[i] === "brand"){
//for(int j = 0; j < value[i].length; j++){
//validBrandValue.contains()
//}
//}
//}
}
//Current Output
(3) [Array(2), Array(2), Array(2)]
0: (2) ["brand", "nike adidas puma cat"]
1: (2) ["item", "trainers jackets socks"]
2: (2) ["random", "hello"]
如何有效地分析Validate
函数中的输入 URL以标记任何未列入白名单的值或参数。在提供的链接示例中,它将标记cat
为未知品牌且random
参数无效
这是一种方法:
const validValues = {
brand: [ "nike", "adidas", "puma" ],
item: [ "trainers", "jackets", "socks"]
}
const Validate = link => {
const url = new URL(link);
const entries = [...url.searchParams.entries()];
let testArr = entries.map(entry => {
const key = entry[0];
const valids = validValues[key]; // key exists
const values = entry[1].split(" "); // parms space separated
return {
[key]: valids ? values.map(elem => ({ [elem]:valids.includes(elem)})) : false
}
})
return testArr;
};
console.log(Validate("https://example.com/?brand=nike%20adidas%20puma%20cat&item=trainers%20jackets%20socks&random=hello"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句