以http://或https://开头的网址,以逗号分隔,不能有空格

时间:2018-10-08 14:11:06

标签: javascript regex

我需要检查用户插入URL的字段。规则是:

  • 没有空格;
  • 以逗号分隔;
  • 每个URL必须以http://或https://
  • 开头

输入文字的有效示例:

一些无效的示例:

这是我的正则表达式,但是不能正常工作:

/(^([\S]https?:\/\/)\w+(?:\.\w+)*\.\w{2,})$*/i

2 个答案:

答案 0 :(得分:1)

您实际的正则表达式不正确,因为当您在正则表达式的开头使用http时,它会接受[\S]https之前的任何非空格字符。

我建议使用Array函数和此 regex 的组合,以确保所有输入的URL正确。

首先用逗号分隔输入值,然后获取urls数组:

var urls = document.getElementById("urls").value.split(",");
urls = urls.map(u => u.trim()).filter(v => v !== '');

然后检查所有网址是否与/^https?:\/\/(\w+)\.\[a-z\]{2,3}$/ regex

相匹配
let valid = urls.every(url => url.match(/^https?:\/\/(\w+)\.[a-z]{2,3}$/));

演示:

document.getElementById("urls").onchange = function() {
  var urls = document.getElementById("urls").value.split(",");
  urls = urls.map(u => u.trim()).filter(v => v !== '');
  console.log(urls);
  let valid = urls.every(url => url.match(/^https?:\/\/(\w+)\.[a-z]{2,3}$/) );
  console.log(valid);
}
<input id="urls" />

答案 1 :(得分:1)

您可以尝试使用以下类似内容:

int bar();
bool query();
void foo(int, bool);

int main()
{
    if (int x = bar() ; bool y = query())
    {
        foo(x, y);
    }
    else
    {
        foo(x * 2, y);
    }
}

这是非常基本的操作,并且不提供广泛的url验证,例如,错误拼写了顶级域名(.com和.cmo)。

只需捕获您的模式^(?:https?:\/\/\w+\.\w+,?)*$ ,然后根据需要递归https?:\/\/\w+\.\w+,? 允许使用可选的逗号(?1)

See it here