Javascript检查Url以及Url是否包含字符串

时间:2013-06-14 09:37:04

标签: javascript regex

我有这个函数来检查输入的Url是否有效。 问题是我还需要知道这个Url是否来自facebook.com。 如果不是,则不应将Url视为有效。 如何编辑下面的功能,使其内部有一个带有facebook.com字符串的网址?

function isUrl(s) {

var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
return regexp.test(s);
}

5 个答案:

答案 0 :(得分:4)

不要只测试字符串中是否有facebook.com,因为它几乎可以在字符串中的任何位置,例如在查询字符串中。

这应匹配任何facebook.com域(以及mail.facebook.com等子域)。我也修改了一下,所以它更精确..(虽然不完美,但你应该从这里管理)。

var regexp = /(ftp|http|https)(:\/\/)(www\.)?([a-zA-Z0-9]+\.)*(facebook\.com)(:[0-9]+)?(\/[a-zA-Z0-9]*)?/ ;

答案 1 :(得分:1)

使用String#indexOf()

这样的事情就不那么复杂了
function isUrl(s) {

    if((s.indexOf("facebook.com")!=-1) || (s.indexOf('?facebook.com=') != -1) || 
         (s.indexOf('&facebook.com=') != -1))
   {
        var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-     \/]))?/
        return regexp.test(s);
   }
   else
     return false;
    }

答案 2 :(得分:1)

将您的退货声明更改为:

return s.indexOf("facebook.com") > -1 && regexp.test(s);

答案 3 :(得分:0)

function isUrl(s) {

  var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
  return regexp.test(s) && s.indexOf('facebook.com') > -1;
}

请参阅String#indexOf

提示:我不会修改我的isUrl方法,因为如果你需要这个函数用于另一个url,那么除了facebook以外的任何东西也是允许的。我会把它分解成这段代码:

function isUrl(s) {
  var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
  return regexp.test(s);
}

function isFacebookUrl(s) {
  return isUrl(s) && s.indexOf('facebook.com') > -1;
}

答案 4 :(得分:0)

您可以修改正则表达式....或者快速而肮脏的解决方案可能是...在使用正则表达式之前检查URL是否以http://facebook.com开头。当然你也想要覆盖https。