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"域名抛出错误。
我不知道问题出在哪里
你的正则表达式有点多余,因为你或在一些已经包含在其他或块中的东西。
我只是简化了
(?:[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建议的正则表达式