0

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

function isUrl(s) {

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

5 回答 5

4

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

This should match any facebook.com domain (and subdomains like mail.facebook.com). I also modified it a bit so it a bit more precise.. (not perfect though, but you should manage from here).

var regexp = /(ftp|http|https)(:\/\/)(www\.)?([a-zA-Z0-9]+\.)*(facebook\.com)(:[0-9]+)?(\/[a-zA-Z0-9]*)?/ ;
于 2013-06-14T09:43:00.043 回答
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;
    }
于 2013-06-14T09:40:56.317 回答
1

将您的退货声明更改为:

return s.indexOf("facebook.com") > -1 && regexp.test(s);
于 2013-06-14T09:41:21.117 回答
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;
}

字符串#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;
}
于 2013-06-14T09:41:01.090 回答
0

You could modify the regex .... Or a quick and dirty solution could be... Check if URL starts with http://facebook.com before using the regex. Of course you would want to cover https as well.

于 2013-06-14T09:43:33.420 回答