3

我正在使用下面的代码来验证 URL。它也是 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');
}

任何人都可以建议我在哪里需要进行更改,以免在 URL 中占用空间。

这是jsfiddle

提前致谢

4

1 回答 1

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*)?$/
于 2013-05-16T20:24:16.603 回答