检查字符串中是否存在http或https的正则表达式

18

所以我有这段代码:

function validateText(str)
{
    var tarea = str;
    var tarea_regex = /^(http|https)/;
    if(tarea_regex.test(String(tarea).toLowerCase()) == true)
    {
        $('#textVal').val('');
    }
}

对于以下内容,这个方法可以完美地工作:

https://hello.com
http://hello.com

但是对于下面的内容不起作用:

this is a website http://hello.com asdasd asdasdas

我尝试过一些阅读,但不知道在哪里放置*?因为根据此处所述,它们将在字符串的任何位置检查表达式 -> http://www.regular-expressions.info/reference.html

谢谢


1
顺便说一句,http://gskinner.com/RegExr/ 是学习正则表达式的好方法。 - timrwood
5个回答

26

试试这个:

function validateText(string) {
  if(/(http(s?)):\/\//i.test(string)) {
    // do something here
  }
}

1
抱歉,我的错 :) - Hosein Yeganloo

22

从外表看,您只是检查字符串中是否存在http或https。正则表达式对于此目的有点过度了。尝试使用indexOf的这个简单代码:

根据外观,您只需检查字符串中是否存在http或https。 正则表达式在这种情况下有点大材小用。 尝试使用indexOf的这段简单代码:

function validateText(str)
{
    var tarea = str;
    if (tarea.indexOf("http://") == 0 || tarea.indexOf("https://") == 0) {
        // do something here
    }
}

1
谢谢,让我试试这个。我试过了,但它将tarea的每个值都视为http或https。 - magicianiam
它会清空任何输入的值。 - magicianiam
是的,正如@Dan Tao指出的那样,那是我的逻辑错误。现在已经修复了。 - Ashley Strout

5

开头的^匹配字符串的开头。只需要将其删除即可。

var tarea_regex = /^(http|https)/;

应该是

var tarea_regex = /(http|https)/;

4

谢谢,当我删除多余的括号并添加斜杠时,它对我很有效。 /((http(s?))://)/ - Scott

3
你尝试使用单词断点而不是行首字符了吗?
var tarea_regex = /\b(http|https)/;

看起来它可以实现你想要的功能。在这里查看:http://jsfiddle.net/BejGd/


抱歉我还没有。我对正则表达式有些陌生,不确定什么是“单词边界”。 - magicianiam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接