C# 用于验证指定为IP v4地址或主机名(带或不带端口号)的字符串的正则表达式
我正在开发一个需要验证用户输入的URL字符串的应用程序。用户从组合框中选择HTTPS、TCP或UDP协议。如果他们从组合框中选择TCP或UDP,则URL字符串:C# 用于验证指定为IP v4地址或主机名(带或不带端口号)的字符串的正则表达式,c#,regex,url,C#,Regex,Url,我正在开发一个需要验证用户输入的URL字符串的应用程序。用户从组合框中选择HTTPS、TCP或UDP协议。如果他们从组合框中选择TCP或UDP,则URL字符串: 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][
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;
}
必须作为IPv4地址或主机名输入
必须包含有效的端口号1-65535
对于IPv4地址,每个八位字节必须在0到255之间有效
如果用户从组合框中选择HTTPS,则URL字符串:
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;
}
必须作为IPv4地址或主机名输入
可能包含路径
可能包含有效的端口号1-65535
对于IPv4地址,每个八位字节必须在0到255之间有效
我尝试过构造几个正则表达式来完成上面描述的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;
}
有人能解释一下我哪里出了问题吗?您只需要在正则表达式声明remove@中使用正则字符串文字,或者使用单个反斜杠
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})$";
您只需要为正则表达式声明remove@使用正则字符串文字,或者使用单个反斜杠
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})$";
您可以在逐字字符串文本中双转义反斜杠。使用单个反斜杠。看看你的代码有什么问题=@WiktorStribiżew-Doh!!!你说得对。我真不敢相信我错过了。谢谢你指出我愚蠢的错误-考虑过了吗?您在逐字字符串文本中双转义了反斜杠。使用单个反斜杠。看看你的代码有什么问题=@WiktorStribiżew-Doh!!!你说得对。我真不敢相信我错过了。谢谢你指出我愚蠢的错误-考虑过的?