C# 需要正则表达式来验证要与TcpClient.Connect()一起使用的主机名和端口

C# 需要正则表达式来验证要与TcpClient.Connect()一起使用的主机名和端口,c#,regex,C#,Regex,标题几乎说明了一切 为了澄清,表达式必须与以下内容匹配: 127.0.0.1:8888 或者这个: localhost:8888 主机名和端口必须是有效的,但它们也必须是一个类似于上面的冒号和all的字符串 如何实现这一点?以下模式应与标准IPv4地址或文本“localhost”以及端口号匹配 public static bool IsValidHostAddress(string hostAddress) { const string Pattern = @"^(([0-9]{1

标题几乎说明了一切

为了澄清,表达式必须与以下内容匹配:

127.0.0.1:8888
或者这个:

localhost:8888
主机名和端口必须是有效的,但它们也必须是一个类似于上面的冒号和all的字符串


如何实现这一点?

以下模式应与标准IPv4地址或文本“localhost”以及端口号匹配

public static bool IsValidHostAddress(string hostAddress)
{
    const string Pattern =  @"^(([0-9]{1,3}.){3}([0-9]{1,3})|localhost):\d+$";

    var regex = new Regex(Pattern, RegexOptions.Compiled);
    return regex.Match(hostAddress).Success;
}

到目前为止你试过什么?还有,怎样才能阻止语法上有效的主机名不是真正的主机名?@Cameron我已经尝试了一个我在网上找到的表达式,但它允许完整的URL和所有这些。。。不是我需要的。至于你的第二个问题,那完全无关。如果我们的客户希望我们的系统为他们工作,那么他们需要提供一个有效的主机名。在意识到这是错误的之前,我错误地选择了这个。即使
localhost
是值,它仍然需要后面的端口号。我如何修改它来满足那个要求?@kehrk用我自己的模式更新了答案。该模式不会确保八进制不超过最大值255,也不会确保端口号不超过最大端口号65535。这样做会大大增加模式的复杂性。这对你来说重要吗?