javascript正则表达式不起作用

时间:2015-06-24 15:12:35

标签: javascript html regex forms

我正在尝试验证文本框以确保在其中写入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,})?)。 我的印象是,这会做到以下几点:

  1. 不匹配以http开头的任何内容...... 正确
  2. 在开始时允许选择www.
  3. 接受来自a-z的一个或多个字符以输入
  4. 在这些字符之后接受一个点
  5. 接受点后面的两个或多个字符,
  6. 再次允许可选点后跟两个或多个字符。
  7. 在实践中,文本框接受类似" ashdiguasdf"等字符串。和" aksjdnfa :: //',〜"它不应该做。任何人都可以解释原因吗?

1 个答案:

答案 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}