YouTube视频ID是否可能为纯数字?如何编写匹配非纯数字串的正则
解决方案
你需要的正则可以通过负向前瞻实现排除纯数字的逻辑,同时兼容YouTube ID的合法字符和长度要求,表达式如下:
// 单独校验11位ID的正则 const ytIdRegex = /^(?!\d{11}$)[a-zA-Z0-9_-]{11}$/;
规则说明
(?!\d{11}$)是负向前瞻断言,会排除刚好由11位纯数字组成的字符串[a-zA-Z0-9_-]{11}限定字符串只能由大小写字母、数字、下划线、短横线组成,且长度固定为11位^和$限定匹配整个字符串,避免误匹配长文本中的子片段
如果你需要保留原有支持匹配完整YouTube链接的能力,可以把原有正则的ID匹配部分替换为上述逻辑,修改后的完整代码如下:
const foo = /((http?(?:s)?:?\/\/)?(www\.)?)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?&v=))((?!\d{11}$)(?:\w|-){11})((?:\&|\?)\S*)?|^(?!\d{11}$)(?:\w|-){11}$/; // 测试用例 console.log(foo.test("abcdefghijk")) // 匹配成功 true console.log(foo.test("ecK3EnyGD8o")) // 匹配成功 true console.log(foo.test("12345678901")) // 纯数字匹配失败 false console.log(foo.test("189741078923512")) // 长度不符匹配失败 false console.log(foo.test("Stack Overflow")) // 含非法字符空格匹配失败 false
内容的提问来源于stack exchange,提问作者unreal
相关产品推荐
相关产品推荐

