正则表达式 url 与本地主机匹配

Regexp url match with localhost

本文关键字:主机 url 正则表达式      更新时间:2023-09-26

我试图找到一个简单的正则表达式来验证url,但在正则表达式方面不是很好。

目前我有这样的正则表达式:(/^https?:'/'/'w/).test(url)

因此,它允许将URL验证为http://localhost:8080等。

我想做的是不要验证网址,如果它们末尾有一些长的特殊字符,例如:http://dodo.......http://dododo&&&&&

你能帮我吗?

这个怎么样?

/^http:'/'/'w+('.'w+)*(:[0-9]+)?'/?('/[.'w]*)*$/

将匹配:http://domain.com:port/path或仅http://domainhttp://domain:port

/^http:'/'/'w+('.'w+)*(:[0-9]+)?'/?$/

匹配不带路径的网址

 

正则表达式块的一些解释:

域:'w+('.'w+)*将文本与点匹配:localhostwww.yahoo.com(可以与"路径"或"端口"部分开始一样长)

端口:(:[0-9]+)?匹配或不匹配以分号开头的数字::8000(它只能是一个)

路径:'/?('/[.'w]*)*匹配任何带有斜杠和点的字母数字:/user/images/0001.jpg(直到行尾)

路径是非常有趣的部分,现在我这样做是为了允许单独的或相邻的点,即这样的表达式是可能的:/././/.../等。如果你想在路径中有点,就像在域部分一样 - 没有边框或相邻的点,那么使用'/?('/'w+(.'w+)*)*正则表达式,类似于部分。

*更新*

此外,如果您希望在您的 URL(或任何其他)中包含(它是有效的)-字符,您应该简单地扩展"URL 文本匹配"的字符类,即 'w+应该变得['-'w]+等等。

如果你想

匹配ABCD那么你可以离开起始部分。

例如,匹配http://localhost:8080

'只是写

/(localhost).

如果你想匹配特定的事物,那么请专注于你想要搜索的术语,而不是句子的开头和结尾。

正则表达式用于搜索术语,直到我们对它们有一个严格的规则。 :)

我希望这能做到..

这取决于您需要正则表达式的复杂程度。一个简单的方法是只接受单词(和端口/域):

^https?:'/'/'w+(:[0-9]*)?('.'w+)?$

请记住,您需要使用 + 字符来匹配一个或多个字符。

当然,还有更好、更复杂的解决方案。

^https?:'/'/localhost:[0-9]{1,5}'/([-a-zA-Z0-9()@:%_'+.~#?&'/=]*)

火柴:

  • https://localhost:65535/file-upload-svc/files/app?query=abc#next

不匹配:

  • https://localhost:775535/file-upload-svc/files/app?query=abc#next

解释

  • 它只能用于本地主机
  • 它还检查端口号的值,因为它应该小于 65535,但您可能需要添加其他逻辑

我参加聚会很晚了,但现在您应该考虑使用 URL 类验证您的 URL。 避免正则表达式的头痛并依赖标准

let isValid;
try {
    new URL(endpoint); // Will throw if URL is invalid
    isValid = true;
} catch (err) {
    isValid = false;
}
你可以

使用它。这也将允许本地主机和实时域。

^https?:'/'/'w+('.'w+)*(:[0-9]+)?('/.*)?$
^https?:'/'/(localhost:([0-9]+'.)+[a-zA-Z0-9]{1,6})?$

将匹配以下情况:

  • http://localhost:3100/api
  • http://localhost:3100/1
  • http://localhost:3100/AP
  • http://localhost:310

将不符合以下情况:

  • http://localhost:3100/
  • http://localhost:
  • http://localhost
  • http://localhost:31