Javascript 如果在文本区域中找到有效的URL,则调用函数

Javascript 如果在文本区域中找到有效的URL,则调用函数,javascript,regex,url,Javascript,Regex,Url,在文本字段中键入有效URL后,立即调用函数myFunction的最佳方式是什么?我在谷歌上搜索过,但没有找到任何有用的东西。使用正则表达式可能是最好的,但我需要一个能够识别各种URL的正则表达式: ,www.google.tld, 但仍然不认为像.x.php这样的东西是URL。有人知道这样一个表达式吗?这将匹配任何以“.com”或“.ch”结尾的URL。您必须维护有效TLD的列表 ^(http:\/\/)?([\w\.]+\.)((com)|(ch))$ 使用javascript时,正斜杠不需

在文本字段中键入有效URL后,立即调用函数myFunction的最佳方式是什么?我在谷歌上搜索过,但没有找到任何有用的东西。使用正则表达式可能是最好的,但我需要一个能够识别各种URL的正则表达式: ,www.google.tld,
但仍然不认为像.x.php这样的东西是URL。有人知道这样一个表达式吗?

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

^(http:\/\/)?([\w\.]+\.)((com)|(ch))$
使用javascript时,正斜杠不需要转义,TLD可能不那么严格,例如,只有2-4个字符

^(https?://)?([\w\.]+\.)([a-z]{2,4})$
考虑到CanSpice对此问题的评论,允许具有不同长度的TLD的想法很难涵盖,因为事件触发器可能触发得太早。onchange触发器上的时间延迟可以解决此类问题。 应权衡每个解决方案的精确要求和优缺点


你可能会有点挣扎,因为会有很多不同的可能性。此url将匹配技术上有效的http或https路径的任何url,该路径包括域名后的路径中的任何字符、任意数量的子域等

((http)s?(://))?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*(/(.*))?
当然,如果要排除内部网,可以使用以下命令强制tld:

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

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


支持ftp

请不要在title.google.com vs index.php中放置标记,因为要知道前者是URL,唯一的方法是在正则表达式中有一个有效TLD列表,这会使它变得缓慢而复杂。随着新TLD的添加,这样的列表也需要更新,因此维护更高。你应该把http://作为一个要求。@Andy E:是的,我想,事实上这并不重要。只要它能识别www.google.com、ht-tp://www.google.com和ht-tp://google.com,我很高兴。你也需要能够识别完整的URL吗?包括路径和查询参数?话题标签像ht tp://google.com/search?q=call-a-function-if-a-valid-url-is-found-in-a-textares哦,天哪,我试着输入google.com,但当我输入google.co时,函数启动了!是的,.co是一个有效的域,因此您需要以某种方式处理这种情况,但这只适用于.com域。它需要适用于所有域。也请看我上面的评论:@Andy E:是的,我想,实际上这并不重要。只要它认可www.google.com、ht-tp://www.google.com和ht-tp://google.com,我就很高兴@Holoradius:你一开始只要求“.com”。。。希望我的更新能帮助你解决问题不,URL只是个例子。我说它需要识别各种URL