如何仅使用正则表达式验证 YouTube 嵌入链接

2024-01-06

我在我的网站中使用 YouTube 嵌入链接。我想验证该链接,就像用户粘贴嵌入链接以外的其他内容一样,那么它应该向我发出无效 URL 的警报。我已经使用了很多正则表达式,其中一些已经在我的代码中进行了评论。我只想要 YouTube 嵌入链接的正则表达式。这是我的代码:

package com.edubot.client.lecture;

import gwt.material.design.client.ui.MaterialButton;
import gwt.material.design.client.ui.MaterialTextBox;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;

public class EmbeddedLink extends Composite  {

    private static EmbeddedLinkUiBinder uiBinder = GWT
            .create(EmbeddedLinkUiBinder.class);

    interface EmbeddedLinkUiBinder extends UiBinder<Widget, EmbeddedLink> {
    }

    @UiField MaterialButton buttonembedded;
    //  @UiField IFrameElement youtubevideo;
    @UiField HTMLPanel htmlpanel;
    @UiField MaterialTextBox textbox ;



    public EmbeddedLink() {
        super();
        sinkEvents( Event.ONPASTE );
        initWidget(uiBinder.createAndBindUi(this));

    }

    @Override
    public void onBrowserEvent(Event event) {
        super.onBrowserEvent(event);
        switch (event.getTypeInt()) {
        case Event.ONPASTE: {
            Timer timer  = new Timer() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    onPasted();
                    Window.alert("paste");
                }
            };
            timer.schedule(1000);
        }
        }

    }

    //  @UiHandler("buttonembedded")
    //      void onClick(ClickEvent e) { 
    ////        onPasted(); 
    //      }


    private void onPasted(){
        //      youtubevideo.setSrc(addEmbeddedLink());
        Window.alert("msg1");
        if(testEmbeddedLink()) {
            String link=textbox.getText().trim();
            htmlpanel.getElement().setInnerHTML(link);
            Window.alert("Valid URL");
        } else {
            Window.alert("Invalid URL");
        }


    }


    public boolean testEmbeddedLink(){
        String link=textbox.getText().trim();
        Window.alert("msg");
        String patternString = "(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/)(?:)(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/[a-zA-Z0-9\-]*";
        //      String patternString = "<iframe title='YouTube video player' width='' height='' src='http://www.youtube.com/embed/$1' frameborder='0' allowfullscreen='1'></iframe>";
        //      String patternString = "~<iframe.+?src="https?://www.youtube.com/embed/([a-zA-Z0-9_-]{11})"[^>]+?></iframe>~i";
        boolean result = link.matches(patternString);

        return result;

    }
    //  "youtube.com/(?<=v|embed\\)?[a-zA-Z0-9]+[^#\\&\\?]*";
    //  "(?<=youtu.be/?<=v|embed\\/)?[a-zA-Z0-9]+[^#\\&\\?]*";
    //  "(https?://)?(www\\.)?(yotu\\.be/|youtube\\.com/)?((.+/)?(watch(\\?v=|.+&v=))?(v=)?)([\\w_-]{11})(&.+)?"
    //  (\"http:\/\/www\.youtube\.com\/v\/\w{11}\&rel\=1\");
    //  (https?://www.youtube(?:-nocookie)?.com/(?:v|embed)/([a-zA-Z0-9-]+).*)"
    //  /<iframe.+?src="http://www.youtube.com/embed/([a-zA-Z0-9_-]{11})"[^>]+?>";</iframe>/i";
    //   "(?:youtube.com)\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})\W";
    //  "s*(https?://www.youtube(?:-nocookie)?.com/(?:v|embed)/([a-zA-Z0-9-]+).*) ";
//   "^.*((youtu.be"+ "\\/)" + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*)

}

private String getYouTubeUrl(String text)
    {
        String finalUrl = null;
        String p = "(//www.youtube(?:-nocookie)?.com/(?:v|embed)/([a-zA-Z0-9-_]+).*)";

        if(text.contains("src"))
        {
            if(text.contains("//") && text.contains("frameborder"))
            {
                int startpos = text.indexOf("/", text.indexOf("src="));
                int endpos = text.indexOf("frameborder");
                String url=text.substring(startpos, endpos-2);

                if(url.matches(p))
                {
                    finalUrl = url;
                }
                else
                {
                    Window.alert("You have entered a wrong embed code");
                }   
            }
            else
            {
                Window.alert("You have entered a wrong embed code");
            }   
        }
        else
        {
            Window.alert("You have entered a wrong embed code");
        }
        return finalUrl;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅使用正则表达式验证 YouTube 嵌入链接 的相关文章

随机推荐

  • 如何在 R 中为 Quantstrat 编写自定义规则函数 - 将追踪止损订单替换为 stoplimit 和ruleOrderProc

    我的目标是使用下面概述的规则来生成信号来放置新的 stoplimit 订单来取代我的追踪止损 我不希望我的止损无限期地跟踪 直到它达到我的盈亏平衡价格 如果已经可以以某种方式实现这一点 请告诉我 我希望在 quantstrat 中编写一个自
  • 如何通过短信或彩信将超链接发送到手机

    我一直在寻找一种方法 通过短信或彩信将具有不同外观的 URL 的超链接发送到手机 我能想到的唯一例子如下 url http www google co uk Click Here url 所以上面的代码会显示 点击这里 当您单击 单击此处
  • 如何使用 JSON-simple (Java) 判断返回是 JSONObject 还是 JSONArray?

    我正在访问一项服务 有时会得到这样的结果 param1 value1 param2 value2 有时会得到这样的回报 param1 value1 param2 value2 param1 value1 param2 value2 我如何知
  • 无法在 Gerrit 中合并

    每当我向 Gerrit 发送评论并且该评论等待一段时间时 我都会收到cannot mergeGerrit 中的消息 我理解它的到来 因为其他人会更改相同的文件并在我之前交付 我正在尝试以下解决方法来解决我的问题 放弃当前的审查 创建一个新的
  • GEKKO RTO 与 MPC 模式

    这是一个由此衍生的问题one https stackoverflow com questions 60761440 variable bounds in mpc with gekko 在发布我的问题后 我找到了一个解决方案 更像是强制优化器
  • 将 Admob 添加到 libgdx

    RelativeLayout layout new RelativeLayout this AndroidApplicationConfiguration config new AndroidApplicationConfiguration
  • 在 Chrome 扩展内容脚本中使用 Dart 无法运行?

    我正在尝试使用 Dart 编写 Chrome 扩展 到目前为止 除了内容脚本之外 一切都很顺利 内容脚本 dart 文件中的 main 函数似乎没有运行 更具体地说 首先 Dartium 无法使用 因为在清单中的 js 规则中给出 dart
  • 学习编程语言的工作原理

    我已经编程多年 主要是Python 但我不明白当我编译或执行代码时幕后发生了什么 本着question https stackoverflow com questions 1514812 gentle introduction to ope
  • Eclipse 调试器跳转到错误的返回语句

    我遇到了一个非常奇怪的情况 我正在 Android 2 1 平台上用 Java 通过 Eclipse Galileo 执行以下操作 Get gravity geomagnetic data to return to the caller f
  • Python:csvwriter 的问题

    我正在尝试将数据 主要是日期 布尔值和浮点数据类型 写入 CSV 文件格式 这是我的代码片段 Write data to file with open OUTPUT DIR output filename w as outputfile w
  • 合并提交第一和第二父母

    在涉及相对提交引用的 Udacity 课程中 它说 表示父提交 表示第一个父提交 和 之间的主要区别在于提交的时间 由合并创建 合并提交有两个父项 通过合并 commit 时 引用用于指示该文件的第一个父级 提交 而 2 表示第二个父级 第
  • NSPropertyListSerialization propertyListWithData 产生不兼容的转换警告/错误

    我正在尝试使用以下代码从 plist 中读取数据 NSString error NSData tempData NSData alloc initWithContentsOfFile Data plist NSDictionary temp
  • 如何通过维基百科 API 获取特定部分的文本

    我只想从维基百科页面中提取特定部分 例子 我想从维基百科文章 House 的 Parts 部分中提取文本 https en wikipedia org wiki House https en wikipedia org wiki House
  • 为什么 Javadoc 会生成不兼容的 XHTML?

    我刚刚将一些生成的 javadoc 粘贴到 eclipse 项目中 发现没有一个 HTML 是兼容的 甚至存在关闭从未打开过的标签的情况 有什么方法可以解决这个问题吗 也许是 遵守 选项 经过一番谷歌搜索后 我发现XHTML Doclet
  • Apache Spark 2.2 支持用户定义类型(UDT)吗?

    从这张 JIRA 票证中Spark 2 0 中隐藏 UserDefinedType https issues apache org jira browse SPARK 14155 似乎spark从2 0版本开始隐藏了UDT API 2 2
  • 如何制作具有三个角和阴影的图像视图

    如何制作这样一个只有三个角的图像 我尝试使用框架布局插入图像视图并使其成为原始图像的资源 添加另一个具有 3 个角的边框 src 的图像视图 但它不起作用 随着材料组件库 https github com material componen
  • Paypal 预付款和 PayFlow 与定期付款链接

    我们想在我们的应用程序中实现 Paypal 这就是我们需要的 经常性付款 试用期 优惠券代码 无需离开我们的页面即可付款 我们发现我们可以使用 Paypal Advanced Payment 和 PayFlow Link Gateway D
  • 获取对象可能为“null”。在 Angular 模板文件中

    在我的 Angular 应用程序中 我收到以下错误 对象可能为 空 问题是我收到此错误不是因为某些打字稿代码 而是因为这个 html 模板
  • HttpClient.PostAsync 第一次很慢

    经过一些基准测试后 我意识到每次启动应用程序时 第一个请求都会比下一个请求花费更多的时间 第一个平均为 500 毫秒 接下来的平均为 120 毫秒 我在 HttpClient 中设置了 cookie 并将 UseProxy 设置为 fals
  • 如何仅使用正则表达式验证 YouTube 嵌入链接

    我在我的网站中使用 YouTube 嵌入链接 我想验证该链接 就像用户粘贴嵌入链接以外的其他内容一样 那么它应该向我发出无效 URL 的警报 我已经使用了很多正则表达式 其中一些已经在我的代码中进行了评论 我只想要 YouTube 嵌入链接