【问题标题】:Call a function if a valid URL is found in a textarea如果在 textarea 中找到有效 URL,则调用函数
【发布时间】:2011-06-23 13:30:20
【问题描述】:

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

【问题讨论】:

  • 请不要在标题中添加标签。
  • google.comindex.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-textarea#res )
  • “哦,伙计,我尝试输入 google.com,但是当我输入 google.co 时,函数触发了!” (是的,.co 是一个有效的域,所以你也需要处理这种情况)

标签: javascript regex url


【解决方案1】:

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

也支持 ftp ;)

【讨论】:

    【解决方案2】:

    你可能会有点挣扎,因为会有很多不同的可能性。这将匹配技术上有效的 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})+(/(.*))?
    

    【讨论】:

      【解决方案3】:

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

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

      使用 javascript,正斜杠不需要转义,TLD 可以不那么严格,例如仅包含 2-4 个字符的内容。

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

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

      example at rubular

      【讨论】:

      • 谢谢,但这仅适用于 .com 域。它需要适用于所有域。也请参阅我上面的评论:“@Andy E:是的,我想,实际上这并不重要。只要它识别 www.google.com、ht tp://www.google.com 和 ht tp://google.com,我很高兴。”
      • @Holoradius:你一开始只要求'.com'...希望我的更新有助于解决你的问题
      • 不,这些 URL 只是示例。我说过它需要识别各种网址
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多