javascript - YouTube 视频能否仅由数字组成,如果可以,如何匹配不仅由数字组成的字符串?

标签 javascript regex

编辑:我最近发现(在某种 Stack Overflow 用户的帮助下)有有效的 YouTube 视频只是字母。

here 相同的问题但在等式中添加了检查字母

我想知道 YouTube 视频的视频 ID 是否可以只包含这样的数字: 12345678901。 我正在编写一个表达式来验证作为 YouTube 视频 ID 的字符串。这是一个简化版的表达式(用于进一步调试的源 here):

const foo = /((http?(?:s)?:?\/\/)?(www\.)?)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?&v=))((?:\w|-){11})((?:\&|\?)\S*)?|(?:^(\w|-){11}$)|(?:\w|-){11}$/;

let bar = "dQw4w9WgXcQ"

// logs true
console.log("is valid: " + foo.test(bar));

是否可以编写一个正则表达式来匹配不仅包含数字或字母的字符串?

标准

这些应该有效:

  • abcdefghijk
  • ecK3EnyGD8o
  • 1s3get2-3ds
  • 4bc2qfs2wrf
  • 28yq389gfwg
  • 3oyh8pw489p

但这些不应该:

  • abcdefghijk
  • 12345678910? (目前不知道 YouTube 是否支持只有数字的视频 ID)
  • 18974107892351240891751928347819234
  • 堆栈溢出
  • kjsad;kflj;klasdfkjalk;sdfjlkas
  • !&$@#)&&()%&*(#@$&(

最佳答案

使用

^[\d_-]*[a-zA-Z][-\w]*$

参见 regex proof

解释

<表类="s-表"> <头> 部分表达 它做什么 <正文> ^ 字符串的开头 [\d_-]* 任何字符:数字( 0-9 ), _ , - (0次或更多次(尽可能匹配)) [a-zA-Z] 任意字符: a-z , A-Z [-\w]* 任意字符:-字字符(a-zA-Z0-9_)(0次或更多次(尽可能匹配) $ 在可选的\n 之前和字符串的结尾

JavaScript 代码:

const oks = [
  'abcdefghijk',
  'ecK3EnyGD8o',
  '1s3get2-3ds',
  '4bc2qfs2wrf',
  '28yq389gfwg',
  '3oyh8pw489p'
];

const nonoks = [
  '12345678910',
  '18974107892351240891751928347819234',
  'Stack Overflow',
  'kjsad;kflj;klasdfkjalk;sdfjlkas',
  '!&$@#)&&()%&*(#@$&('
];

const regex = /^[\d_-]*[a-zA-Z][-\w]*$/;

for (const i of oks)
  console.log(i, regex.test(i))

for (const i of nonoks)
  console.log(i, regex.test(i))

关于javascript - YouTube 视频能否仅由数字组成,如果可以,如何匹配不仅由数字组成的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69139814/

相关文章:

javascript - 禁用在电子邮件客户端中右键单击图像

javascript - 为什么 JavaScript 在使用对象作为键时会隐式字符串化参数值?

javascript - 匹配任何不以零结尾的数字的正则表达式

regex - JavaScript 自定义正则表达式 : 1 letter + 1 number (dot) 1 number

php - 正则表达式之间的精确数字/字符串匹配

Javascript:处理多个动态元素的事件

php - 使用 preg_replace 时如何忽略字符串中的某些单词

regex - 查找所有电话号码

regex - PostgreSQL 正则表达式

javascript - 多次 Grunt Concat 同一个文件