我有这个函数来检查输入的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);
}
答案 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)
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;
}
提示:我不会修改我的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。