我正在尝试验证文本框以确保在其中写入URL(减去" http://"部分)。这是我的代码:
var isUrl;
var regex = new RegExp("^(?!http)(www\.)?(([a-z])+\.[a-z]{2,}(\.[a-z]{2,})?)");
var siteUrl = e.target.value;
if (siteUrl.match(regex)) {
isUrl = true;
}
else {
isUrl = false;
}
所以我的正则表达式是^(?!http)(www\.)?(([a-z])+\.[a-z]{2,}(\.[a-z]{2,})?)
。
我的印象是,这会做到以下几点:
http
开头的任何内容...... 正确 www.
在实践中,文本框接受类似" ashdiguasdf"等字符串。和" aksjdnfa :: //',〜"它不应该做。任何人都可以解释原因吗?
答案 0 :(得分:2)
主要问题是你在引用字符串中使用\
字符,javascript将其解释为“控制字符”的开头(例如换行符的\n
等) )。
一种选择是将\
替换为\\
来撤消它。
但最简单的解决方案是使用以下格式......
var regex = new RegExp(/^(?!http)(www\.)?(([a-z])+\.[a-z]{2,}(\.[a-z]{2,})?)/);
这也允许你通过在最后使用i
字符使它不区分大小写(如果你愿意),就像这样......
var regex = new RegExp(/^(?!http)(www\.)?(([a-z])+\.[a-z]{2,}(\.[a-z]{2,})?)/i);
作为额外的一点,你使用的capture groups比实际需要的更多。你的表达也可以用这样的结果写成......
^(?!http)(?:www\.)?[a-z]+(?:\.[a-z]{2,}){1,2}