如何简化针对多个正则表达式的字符串测试
How to simplify testing a string against multiple regexes
我想验证字符串是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');
JS Fiddle
您可以为每个站点创建一个属性为的对象
var sites = {
spotify: /^(spotify:|https:'/'/[a-z]+'.spotify'.com'/)/,
youtube: /^(?:https?:'/'/)?(?:www'.)?(?:youtu'.be'/|youtube'.com'/(?:embed'/|v'/|watch'?v=|watch'?.+&v=))(('w|-){11})(?:'S+)?$/,
};
function validateUrl (url) {
for (var site in sites) {
if ( url.match(sites[site]) ) return site;
}
};
// I/O:
var div = document.querySelector('div');
var input = document.querySelector('input');
input.oninput = reportValidation;
function reportValidation() {
div.textContent = validateUrl(input.value) || 'invalid url';
}
reportValidation();
Type URL:<br>
<input type="text" size="60" value="https://open.spotify.com/track/3JiockjOTd8m2VGcTGkmew">
<div></div>
如果您不需要依赖Spotify和YouTube的单独返回,那么您可以将正则表达式与|
结合起来,而不用考虑String原型函数:
function validateUrl(url) {
if (url.match(/^(spotify:|https:'/'/[a-z]+'.spotify'.com'/)|^(?:https?:'/'/)?(?:www'.)?(?:youtu'.be'/|youtube'.com'/(?:embed'/|v'/|watch'?v=|watch'?.+&v=))(('w|-){11})(?:'S+)?$/)) {
alert('valid');
} else {
alert('invalid url');
}
};
validateUrl('https://open.spotify.com/track/3JiockjOTd8m2VGcTGkmew');
如果目的是只检查URL的来源,那么更短的时间是只检查spotify.com
、youtu.be
或youtube.com
。
function validateUrl(url) {
if (url.match(/spotify'.com/)) {
alert('spotify');
} else if (url.match(/youtu'.be|youtube'.com/)) {
alert('youtube');
} else {
alert('invalid url');
}
};
validateUrl('https://open.spotify.com/track/3JiockjOTd8m2VGcTGkmew');
相关文章:
- 将电子邮件验证正则表达式字符串存储在JSON中
- 带有模式的正则表达式字符串
- Javascript if数组包含正则表达式字符串
- 在JSON中指定正则表达式字符串,在JavaScript和PHP中使用
- 从正则表达式文本中获取正则表达式字符串表示的最佳方式
- 正则表达式 - 字符串不能以空格开头,以空格结尾,并且连续包含几个空格
- 正则表达式 - 字符串不应包含超过 7 位数字
- 在 javascript 中将正则表达式字符串转换为正则表达式不同
- Javascript:测试单个字符在正则表达式字符串中找到
- 正则表达式(字符串比较)
- 是否可以生成与正则表达式字符串匹配的字符串
- 正则表达式字符串匹配
- 正则表达式字符串比较忽略符号
- 是否可以使用正则表达式解析正则表达式字符串
- 正则表达式字符串在文档中替换为 JavaScript
- 如何使正则表达式字符串拒绝空白字段
- 拆分正则表达式字符串
- 表示正则表达式字符串表示法
- 将HTML标记添加到此正则表达式字符串中
- 将正则表达式字符串转换为javascript中的正则表达式对象