在以逗号分隔的列表上应用URL验证正则表达式

时间:2019-05-03 14:04:59

标签: javascript regex

我正在尝试使用以下正则表达式进行网址验证。

/^((((.*):\/\/)|(mailto:|news:))(%[0-9A-Fa-f]{2}|[-()_.!~*';\/?:@&=+$,A-Za-z0-9])+)([).!';\/?:,][[:blank:]])?$/i.test( value );

当我提供一个URL时,它可以按预期工作。我的输入将包含多个URL,这些URL以逗号分隔,我想对逗号分隔列表中的所有单个URL应用上述正则表达式。我还想防止在URL中使用某些字符串(例如“名称”,“城市”等)

例如

我需要对正则表达式进行哪些更改才能获得上述结果?

1 个答案:

答案 0 :(得分:0)

由于您的正则表达式适用于单个网址,因此您可以使用splitevery的组合使其与列表一起使用。在我的解决方案之下:

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

Run on CodeSandbox