事先道歉,因为我知道这个问题有many answers但是我没有成功实施任何给定的答案。话虽如此,让我们来解决这个问题。
我有一个包含文本输入的表格,用户可以在其中输入youtube视频ID
提交我的javascript将创建一个包含这些youtube视频ID的数组
如果用户输入了youtube网址,则数组会中断
快速解决方案
如果有人可以帮助我进行正则表达式验证,那么用户将得到正确的警报并纠正他们的输入,这将是一个良好的开端
理想解决方案
我不喜欢提醒用户并让他们改变他们输入的内容,因为它的用户体验不好,所以如果有人今天感觉更有帮助,可以告诉我如何拿走他们输入的内容并删除网址并仅推送youtube视频ID到数组,这将是非常精彩的:)
示例:如果用户输入了
["https://www.youtube.com/watch?v=K1CScQOj1dA", "https://youtu.be/wIJ1sFrgMds", "IISzG-sPUuo"]
代码会格式化他们的输入,最终的userSongs
数组将是:
["K1CScQOj1dA", "wIJ1sFrgMds", "IISzG-sPUuo"]
这是我的小提琴http://jsfiddle.net/1qLr9n2j/
如您所见,当两个输入为无效条目时,警报显示不匹配
答案 0 :(得分:1)
您可以使用以下内容进行匹配:
.*?([\w-]+)$
并替换为$1
。
请参阅DEMO
JS代码:
var rx = /.*?([\w-]+)$/;
for (var i = 0; i < userSongs.length; i++) {
userSongs[i] = userSongs[i].replace(rx, '$1');
}
alert(userSongs);
答案 1 :(得分:1)
这是我对理想解决方案
的抨击var re = new RegExp("youtu(?:\.be|be\.com)/(?:.*v(?:/|=)|(?:.*/)?)([a-zA-Z0-9-_]+)");
$('.song-input').each(function () {
var val = $(this).val()
if (val) {
var matches = val.match(re);
$(this).val(matches[1]);
}
});
我从詹姆斯·普尔森的answer那里拿出正则表达式来解决你所链接的问题。