使用正则表达式验证URL中的空间

时间:2013-05-16 13:34:26

标签: jquery regex

我使用下面的代码来验证网址。它还验证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

提前致谢

1 个答案:

答案 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*)?$/