正则表达式用端口验证域名

时间:2013-04-17 11:24:49

标签: c# .net 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”。

我不确定问题出在哪里。

1 个答案:

答案 0 :(得分:2)

你的正则表达式有点多余,因为你或某些已经包含在另一个或块中的东西。

我刚刚简化了你所拥有的东西

(?:[A-Za-z0-9-]+\.)+[A-Za-z0-9]{1,3}:\d{1,5}

它运作得很好......

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

你的问题是你的或者像这样打破了......

[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}|\*)$

然而,由于+包括{1-3},所以第一个到第二个或多个项目将是多余的。

即。 [A-Za-z0-9 \ - ] +也会匹配任何匹配的东西[A-Za-z0-9] {1,3}

您可以使用此工具来帮助测试您的Regex: http://regexpal.com/

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

上面的正则表达式虽然有效但会允许无效的主机名。

应该修改它以不允许第一个字符中的标点符号。

所以应该修改它看起来像这样。

(?:[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建议的正则表达式