我正在尝试使用以下正则表达式进行网址验证。
/^((((.*):\/\/)|(mailto:|news:))(%[0-9A-Fa-f]{2}|[-()_.!~*';\/?:@&=+$,A-Za-z0-9])+)([).!';\/?:,][[:blank:]])?$/i.test( value );
当我提供一个URL时,它可以按预期工作。我的输入将包含多个URL,这些URL以逗号分隔,我想对逗号分隔列表中的所有单个URL应用上述正则表达式。我还想防止在URL中使用某些字符串(例如“名称”,“城市”等)
例如
我需要对正则表达式进行哪些更改才能获得上述结果?
答案 0 :(得分:0)
由于您的正则表达式适用于单个网址,因此您可以使用split和every的组合使其与列表一起使用。在我的解决方案之下:
const isClean = str => ["name", "city"].every(word => !str.includes(word));
const isValid = input =>
input
.split(",")
.every(
value =>
/^((((.*):\/\/)|(mailto:|news:))(%[0-9A-Fa-f]{2}|[-()_.!~*';/?:@&=+$,A-Za-z0-9])+)([).!';/?:,][[:blank:]])?$/i.test(
value
) && isClean(value)
);
console.log(isValid("http://localhost:8080")); // true
console.log(isValid("https://something.com")); // true
console.log(isValid("http://localhost:8080,something.com,something2.com")); // false
console.log(isValid("http://localhost:8080,http://something.com,http://something2.com")); // true
console.log(isValid("http://name.com")); // false
console.log(isValid("http://city.com")); // false