有许多类似的问题,但他们没有回答没有www.
,http://
等网址的问题。我要做的是检查字符串是否有问题包含一个包含任何类型网址的网址。当您提交推文时Twitter会这样做。
可接受的网址包括但不限于:
我试过Daring Fireball&的两个正则表达式This question:
var regex = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\"\\.,<>?\u00AB\u00BB\u201C\u201D\u2018\u2019]))/i;
var regex = /(?:<\w+.*?>|[^=!:'"\/]|^)((?:https?:\/\/|www\.)[-\w]+(?:\.[-\w]+)*(?::\d+)?(?:\/(?:(?:[~\w\+%-]|(?:[,.;@:][^\s$]))+)?)*(?:\?[\w\+%&=.;:-]+)?(?:\#[\w\-\.]*)?)(?:\p{P}|\s|<|$)/;
以下是我正在进行的测试示例:http://jsfiddle.net/3Wn26/5/
答案 0 :(得分:4)
我认为没有一种可靠的方法(随着时间的推移)。现在new gTLDs are coming,它很难跟上。无论如何,我试了一下。
/
(
\b
(?:(https?|ftp):\/\/)?
(
(?:www\d{0,3}\.)?
(
[a-z0-9.-]+\.
(?:[a-z]{2,4}|museum|travel)
(?:\/[^\/\s]+)*
)
)
\b
)
/ix
http://www.google.com/anyquerystringSAY/Rfy/srA/yh
http
www.
的网址,例如:www.google.com/swrua8rua8rUWRWAURHAJSrjuhFAhjT/Rtgfsbdh
www.
的网址,例如:google.com/sarwar8wa8r/R/A(R8
或images.google.com/w9r89w9ar8a9sjfriJRIUS(RY/(YUr
或者,您可以将(?:[a-z]{2,4}|museum|travel)
位替换为所有ones listed here,但该列表永远不会停止增长,所以我怀疑它是值得的。 (你可以看到我添加了两个例外博物馆和旅行。)
另请注意我添加了ftp,如果您不需要它,请随时删除它。
希望这有帮助。
答案 1 :(得分:1)
(# Scheme
[a-z][a-z0-9+\-.]*:
(# Authority & path
//
([a-z0-9\-._~%!$&'()*+,;=]+@)? # User
([a-z0-9\-._~%]+ # Named host
|\[[a-f0-9:.]+\] # IPv6 host
|\[v[a-f0-9][a-z0-9\-._~%!$&'()*+,;=:]+\]) # IPvFuture host
(:[0-9]+)? # Port
(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/? # Path
|# Path without authority
(/?[a-z0-9\-._~%!$&'()*+,;=:@]+(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/?)?
)
|# Relative URL (no scheme or authority)
([a-z0-9\-._~%!$&'()*+,;=@]+(/[a-z0-9\-._~%!$&'()*+,;=:@]+)*/? # Relative path
|(/[a-z0-9\-._~%!$&'()*+,;=:@]+)+/?) # Absolute path
)
# Query
(\?[a-z0-9\-._~%!$&'()*+,;=:@/?]*)?
# Fragment
(\#[a-z0-9\-._~%!$&'()*+,;=:@/?]*)?
RFC 3986。 验证字符串是否包含RFC 3986中指定的URL。支持绝对和相对URL。
答案 2 :(得分:0)
答案是 - 你做不到。
例如,Twitter将歌手Will.I.Am的名称视为URL(.am 是有效的tld)。如果不知道每个tld的所有域名注册规则,就无法知道网址是否有效 没有 测试。
我建议你这样做。
答案 3 :(得分:0)
我的名为FuncJS的简单JavaScript库有一个名为“findLinks()”的函数,它应该能够完成您想要的任务。
假设你有一个包含链接的字符串,只需包含在函数参数中,如下所示:
findLinks("Visit my website at http://website.com and visit my profile on Twitter at http://twitter.com/yourProfile!");
然后使用各种方法输出它,例如document.write,输出的字符串应突出显示链接。
要更好地了解此功能,请阅读http://docs.funcjs.webege.com/findLinks().html上的文档。
希望这可以帮助你和其他任何想要这样做的人! :)