我需要检查用户插入URL的字段。规则是:
输入文字的有效示例:
一些无效的示例:
这是我的正则表达式,但是不能正常工作:
/(^([\S]https?:\/\/)\w+(?:\.\w+)*\.\w{2,})$*/i
答案 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)
。