Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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# Regex使用端口验证域名_C#_.net_Regex - Fatal编程技术网

C# Regex使用端口验证域名

C# Regex使用端口验证域名,c#,.net,regex,C#,.net,Regex,我是一名新开发人员,对正则表达式没有太多接触。今天我指定使用正则表达式修复一个bug,但是经过很多努力,我找不到错误 这是我的要求 我的代码是: string regex = "^([A-Za-z0-9\\-]+|[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9] {1,3}\\.[A-Za-z0-9]{1,3}):([0-9]{1,5}|\\*)$"; Regex _hostEndPointRegex = new Regex(regex)

我是一名新开发人员,对正则表达式没有太多接触。今天我指定使用正则表达式修复一个bug,但是经过很多努力,我找不到错误

这是我的要求

我的代码是:

string regex = "^([A-Za-z0-9\\-]+|[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]    {1,3}\\.[A-Za-z0-9]{1,3}):([0-9]{1,5}|\\*)$";

Regex _hostEndPointRegex = new Regex(regex);

bool isTrue = _hostEndPointRegex.IsMatch(textBox1.Text);
它为域名抛出了一个错误,比如“nikhil-dev.in.abc.ni:8080”


我不确定问题出在哪里。

您的正则表达式有点多余,因为您或某些内容已经包含在其他或块中

我只是简化了你必须做的事情

(?:[A-Za-z0-9-]+\.)+[A-Za-z0-9]{1,3}:\d{1,5}
而且效果很好

我不确定为什么在允许的字符中有\个字符,因为我很确定主机名中不允许\个字符

你的问题是你的or像这样把事情分解

[A-Za-z0-9\\-]+

[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}

\*
正如评论员所说,第二块中不包括“-”

所以也许你是有意的

^((?:[A-Za-z0-9\\-]+|[A-Za-z0-9]{1,3})\.[A-Za-z0-9]{1,3}\.[A-Za-z0-9]{1,3}\.[A-Za-z0-9]{1,3}):([0-9]{1,5}|\*)$
但是,前两个或“ed”项是多余的,因为+包含{1-3}

ie.[A-Za-z0-9\-]+也将匹配与[A-Za-z0-9]{1,3}匹配的任何内容

您可以使用此工具帮助测试Regex:

我个人认为每个开发者都应该有

上面的正则表达式虽然有效,但允许使用无效的主机名

应修改为不允许在第一个字符中使用标点符号

所以应该修改成这样

(?:[A-Za-z0-9][A-Za-z0-9-]+\.)(?:[A-Za-z0-9-]+\.)+[A-Za-z0-9]{1,3}:\d{1,5}
理论上也不允许主机以连字符结尾

这太复杂了,我只会使用正则表达式来捕获部分,然后使用Uri.CheckHostName来实际检查Uri是否有效


或者你可以使用CodeCaster建议的正则表达式

我想你的问题是,
-
不被允许。。。也就是说,我的正则表达式不太好。为什么要重新发明轮子呢?这里有一些函数,如(假设的)和一个可怕的正则表达式。