我使用下面的代码来验证网址。它还验证URL中的空间。例如
'http://news.yahoo.com/blogs/lookout/texas -tornadoes-granbury-photos-video-121304415.html'
var post_permalink = 'http://news.yahoo.com/blogs/lookout/texas -tornadoes-granbury-photos-video-121304415.html';
if(/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|www\.)[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/.test(post_permalink)){
console.log('valid');
} else {
console.log('invalid');
}
任何人都可以建议我在哪里进行更改,这样就不会占用网址空间。
这是jsfiddle
提前致谢
答案 0 :(得分:2)
可以简化正则表达式而不改变其含义。
这部分:
(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|www\.)
可以改写为:
(https?:\/\/(www\.)?|www\.)
这部分:
[\-\.]{1}
可以改写为:
[-.]
不使用捕获组,因此您可以使它们不捕获:
/^(?:https?:\/\/(?:www\.)?|www\.)[a-z0-9]+(?:[-.][a-z0-9]+)*\.[a-z]{2,5}(?::[0-9]{1,5})?(?:\/.*)?$/
可以通过将.*
末尾的(?:\/.*)?
更改为\S*
来修复空间问题(模式的其余部分无论如何都不允许空间):
/^(?:https?:\/\/(?:www\.)?|www\.)[a-z0-9]+(?:[-.][a-z0-9]+)*\.[a-z]{2,5}(?::[0-9]{1,5})?(?:\/\S*)?$/