Regex用端口验证域名

本文关键字:验证 域名 Regex | 更新日期: 2023-09-27 18:09:51

我是一个新的开发人员,对正则表达式没有太多的了解。今天我分配修复一个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);

对于" nikhill -dev.in.abc.ni:8080"域名抛出错误。

我不知道问题出在哪里

Regex用端口验证域名

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

我只是简化了

(?:[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}|'*)$

但是第一个到两个or'ed项是多余的,因为+包含{1-3}。

ie。[A-Za-z0-9'-]+也会匹配任何匹配[A-Za-z0-9]{1,3}

你可以使用这个工具来帮助测试你的正则表达式:http://regexpal.com/

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

上面的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建议的正则表达式