正则表达式,用于使用可选方案验证 URL

本文关键字:方案 验证 URL 用于 正则表达式 | 更新日期: 2023-09-27 18:32:11

我想使用正则表达式验证URL。以下是我验证 URL 的条件:

  1. 方案是可选的
  2. 应允许子域
  3. 应允许端口号
  4. 应允许路径。

我正在尝试以下模式:

((http|https)://)?(['w-]+'.)+['w-]+(/['w- ./?%&=]*)?

但我没有得到预期的结果。即使是像"*.example.com"这样的无效网址也会被匹配。

它有什么问题?

正则表达式,用于使用可选方案验证 URL

你匹配整个字符串吗? 你没有说你正在使用什么语言,但在 Python 中,看起来你可能正在使用search而不是match

解决此问题的一种方法是用 ^ 开始正则表达式,然后用 $ 结束它。

虽然解析 URL 最好留给库(因为我最了解 perl,所以我会建议像 http://search.cpan.org/dist/URI/这样的东西),如果您需要一些帮助来调试该语句,最好在调试器中尝试一下,例如:http://www.debuggex.com/。

我认为它匹配的主要原因之一是因为您不使用开头和结尾字符串匹配标记。 这意味着,该字符串的任何部分都可能与您明确输入的内容匹配,但由于您没有使用字符串的开始和结束标记来标记它,因此您的正则表达式可能只是匹配字符串中的"example.com",而不是整个输入。

在您的输入的帮助下找到了我条件的正则表达式

^(http(s)?://)?[0-9a-zA-Z]([-.'w]*[0-9a-zA-Z])*(:(0-9)*)*('/?)([a-zA-Z0-9'-‌​'.'?','''/'''+&%'$#_]*)?$

以下代码在 c# 中对我有用

private static bool IsValidUrl(string url)
{
     return new Regex(@"^(http|http(s)?://)?(['w-]+'.)+['w-]+[.'w]+('['?%&=]*)?").IsMatch(url) &&!new Regex(@"[^a-zA-Z0-9]+$").IsMatch(url);
}

它允许"something.anything(至少在一段时间后2)有或没有http(s)和www。