如果在textarea中找到有效的URL,则调用函数

时间:2011-02-08 16:28:41

标签: javascript regex url

只要在文本字段中输入有效的URL,立即调用函数(myFunction())的最佳方法是什么?我已经google了一下,但我没有发现任何有用的东西。使用正则表达式可能是最好的,但我需要一个识别各种URL的方法:
http://google.tld,www.google.tld,http://www.google.tld 但仍然不认为像“index.php”这样的东西是一个URL。有谁知道这样的表达?

3 个答案:

答案 0 :(得分:0)

这将匹配任何以“.com”或“.ch”结尾的网址(您必须维护有效TLD列表)

^(http:\/\/)?([\w\.]+\.)((com)|(ch))$

使用javascript,forwardslash不需要转义,TLD可能不那么严格,例如只有2-4个字符。

^(https?://)?([\w\.]+\.)([a-z]{2,4})$

考虑到CanSpice对此问题的评论,难以涵盖允许不同长度的TLD的想法,因为事件触发器可能过早发生。 onchange触发器的时间延迟可以解决这种问题。 应对每种解决方案的精确要求和优缺点进行加权。

example at rubular

答案 1 :(得分:0)

你可能会有点挣扎,因为会有很多不同的可能性。这个匹配任何在技术上是有效的http或https路径的URL(包括域名后面的路径中的任何字符,任意数量的子域等)

((http)s?(://))?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*(/(.*))?

如果您要排除Intranet,可以使用以下命令强制使用tld:

((http)s?(://))?[a-zA-Z0-9\-]+(\.[a-zA-Z0-9]+)*(\.[a-zA-Z0-9]{2,4})+(/(.*))?

答案 2 :(得分:0)

^((?: HTTPS | FTP):\ / \ /)?([。\ W \] +)([A-Z] {2,4})$

也支持ftp;)