Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于验证指定为IP v4地址或主机名(带或不带端口号)的字符串的正则表达式_C#_Regex_Url - Fatal编程技术网

C# 用于验证指定为IP v4地址或主机名(带或不带端口号)的字符串的正则表达式

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][

我正在开发一个需要验证用户输入的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][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!!!你说得对。我真不敢相信我错过了。谢谢你指出我愚蠢的错误-考虑过的?