我正在开发一个需要验证用户输入的URL字符串的应用程序。用户从组合框中选择协议(HTTPS,TCP或UDP)。如果他们从组合框中选择TCP或UDP,则为URL字符串:
如果用户从组合框中选择HTTPS,则为URL字符串:
我已经尝试构建一些正则表达式来完成上述URL字符串的验证,但不幸的是,我似乎有些不对劲。我远不是正则表达的专家,而且我已经看了很长时间了,我想我需要一些比我更聪明的人的帮助。 : - )
以下是一些应该有效的示例字符串:
For TCP/UDP:
10.1.1.100:12345
mydomain.fr:31337
For HTTPS:
192.168.0.1
192.168.0.1/testdir
192.168.0.1:12345/testdir
192.168.0.1:12345/testdir/testdir_2
mydomain.fr
www.mydomain.fr
www.mydomain.fr/testdir
www.mydomain.fr:12345/testdir
www.mydomain.fr:12345/testdir/testdir_2
以下是我尝试用来验证URL字符串的两个C#方法:
public static bool IsValidHttpsUrl(string url)
{
const string Pattern = @"^(([a-z0-9-]+\\.)+[a-z]{2,6}|((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]))(:(6553[0-5]|655[0-2]\\d|65[0-4]\\d{2}|6[0-4]\\d{3}|[1-5]\\d{4}|[1-9]\\d{0,3}))?(/[\\w/.]*)?$";
var regex = new System.Text.RegularExpressions.Regex(Pattern, System.Text.RegularExpressions.RegexOptions.Compiled);
return regex.Match(url).Success;
}
public static bool IsValidTcpOrUdpUrl(string url)
{
const string Pattern = @"^(([a-z0-9-]+\\.)+[a-z]{2,6}|((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])):(6553[0-5]|655[0-2]\\d|65[0-4]\\d{2}|6[0-4]\\d{3}|[1-5]\\d{4}|[1-9]\\d{0,3})$";
var regex = new System.Text.RegularExpressions.Regex(Pattern, System.Text.RegularExpressions.RegexOptions.Compiled);
return regex.Match(url).Success;
}
任何人都可以了解我出错的地方吗?
答案 0 :(得分:3)
您只需要使用常规字符串文字进行正则表达式声明(删除@
),或使用单个反斜杠。
const string Pattern = @"^(([a-z0-9-]+\.)+[a-z]{2,6}|((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]))(:(6553[0-5]|655[0-2]\\d|65[0-4]\\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}))?(/[\w/.]*)?$";
const string Pattern = @"^(([a-z0-9-]+\.)+[a-z]{2,6}|((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])):(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3})$";