C# Regex使用端口验证域名
我是一名新开发人员,对正则表达式没有太多接触。今天我指定使用正则表达式修复一个bug,但是经过很多努力,我找不到错误 这是我的要求 我的代码是: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)
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建议的正则表达式我想你的问题是,
-
不被允许。。。也就是说,我的正则表达式不太好。为什么要重新发明轮子呢?这里有一些函数,如(假设的)和一个可怕的正则表达式。