文字列がspotifyかyoutubeか無効なURLであるかどうかを検証したいと思います。これはうまくいくが、もっと簡単にできるようだ。どうすればより効率的にすることができますか?複数の正規表現に対する文字列のテストを簡略化する方法
String.prototype.spotifyUrl = function() {
return this.match(/^(spotify:|https:\/\/[a-z]+\.spotify\.com\/)/);
}
String.prototype.youtubeUrl = function() {
return this.match(/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/);
}
function validateUrl (url) {
if (url.spotifyUrl()) {
alert('spotify');
}
else if (url.youtubeUrl()) {
alert('youtube');
}
else {
alert('invalid url');
}
};
validateUrl('https://open.spotify.com/track/3JiockjOTd8m2VGcTGkmew');
なぜこれほど複雑な正規表現をyoutube' 'か? – rock321987
私はそれをそのまま残すだろう、正規表現が何を参照しているかを決定するロジックが必要です。よりシンプルなソリューションを探して時間を節約しましょう。 – iSS
妥当性確認のためだけの場合は、 'String.prototype.match'と'/^(?: https?:\/\ /)?(?: www \。)の代わりに 'RegExp.prototype.test'を使用します。 youtu(?:\。be \/| be \ .com)\/'で十分です。 –