编辑:我最近发现(在某种 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。
解释
^
[\d_-]*
0-9
), _
, -
(0次或更多次(尽可能匹配))[a-zA-Z]
a-z
, A-Z
[-\w]*
-
字字符(a-z
、A-Z
、0-9
、_
)(0次或更多次(尽可能匹配)$
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/