当前位置: 首页 > 知识库问答 >
问题:

带有JavaScript的youtube url正则表达式

景高杰
2023-03-14

我有一个表单,它有一个输入字段,只要求一个有效的youtube url,没有逗号分隔的youtube url。我使用以下正则表达式验证youtube url的用户输入:

^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?$

但如果用户输入逗号分隔的有效youtube链接,这些正则表达式就会失败。

我想要一个正则表达式,simpy只允许在输入字段中有一个有效的youtube链接。有人能在这方面帮我吗,因为我对regex还不熟悉?

例如:

https://www.youtube.com/watch?v=DFYRQ_zQ-gk

这应该失败,因为只能输入一个url,如果url以逗号分隔,则regex将失败

共有1个答案

孔建柏
2023-03-14

代码下面,片段验证输入字段,以仅输入单个URL。

function isUrlValid(url) {
    return /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(url);
}

测试用例:

valid:   https://google.com
valid:   http://www.google.com:80/
valid:   https://www.google.com:443/
valid:   http://127.0.0.1/
invalid: www.site.com
invalid: x:
invalid: http://
invalid: javascript:alert('xss')
 类似资料:
  • 问题内容: 如何在JavaScript中使用支持Unicode的正则表达式? 例如,应该有类似的东西可以匹配Letters或Marks类别中的任何代码点(而不仅仅是ASCII的),并且希望具有这样的过滤器来标点,等等。 问题答案: ES 6的情况 即将发布的ECMAScript语言规范,版本6,包含可识别Unicode的正则表达式。必须使用u正则表达式上的修饰符启用支持。请参阅ES6中支持Unic

  • 正则练习 1.生成一个正则表达式regexObj 描述字符串规则的表达式,两种方式 直接量: /pattren/attrs(/规则/属性) 对象构造方式:new RegExp(pattern,arrtes) (/规则/属性) 2.regexObj.test(str) 测试正则表达式regexObj与指定字符串是否匹配 /10086/.test('10086') //true /10086/.tes

  • 问题内容: 我有一个表,其中存储了某些单词或单词组。我想选择以大写字母开头,没有空格且仅包含字母的条目。我的SQL看起来像这样: 我如何使用条件来做同样的事情? 问题答案: 尝试这个:

  • 问题内容: 我得到了一个包含多行纯utf-8文本的文件。如下所示,按中文,是中文。 文件本身以utf-8格式保存。文件名是xx.txt 这是我的python代码,env是python2.7 这里有问题的是我没有结果。 我想从这里的十进制字符串中获得。 为什么此代码不起作用?谁能向我解释,我什么也没有。 问题答案: 您的代码有几个问题。首先,您应该使用。另外,添加re.UNICODE标志也很不错(尽

  • 问题内容: 我有一个文档,需要从中提取一些数据。文档包含类似这样的字符串 我需要提取文字后双引号的文本 如何在Java中使用正则表达式执行此操作 问题答案: 向后隐式断言最近针对JavaScript进行了定稿,并将在ECMA-262规范的下一个出版物中发表。Chrome 66(Opera 53)支持它们,但在撰写本文时,还没有其他主流浏览器。 较早的浏览器不支持JavaScript正则表达式中的向

  • 本文向大家介绍javascript正则表达式简介,包括了javascript正则表达式简介的使用技巧和注意事项,需要的朋友参考一下 概述 正则表达式是事先声明一组规则,用于匹配字符串中的字符。 基本语法 元字符 在正则表达式的模式中,有一些字符是有特殊含义的,被称为元字符。元字符都是针对单个字符匹配的。 \w 匹配大小写英文字符及数字 0 到 9 之间的任意一个及下划线,相当于 [a-zA-Z0-