Java 域名校验正则表达式

导语

在网络开发中,域名校验是非常重要的一项任务。通过合适的正则表达式,我们可以有效地验证用户输入的域名是否合法,从而减少安全风险。本文将介绍如何使用Java编写正则表达式来校验域名,并给出相应的代码示例。

什么是域名?

域名是指用于在Internet上标识某一主机或者服务的名称。它由多个部分组成,每个部分之间使用点号(.)分隔。例如,www.example.com是一个域名,由三个部分组成:www、example和com。

域名校验规则

校验域名的正则表达式需要遵循一定的规则,以确保域名的合法性。以下是一些常见的域名校验规则:

  1. 域名只能由字母(a-z)、数字(0-9)和连字符(-)组成。
  2. 域名的每个部分(以点号分隔的部分)不能以连字符开始或结束。
  3. 域名的每个部分的长度不能超过63个字符。
  4. 域名的总长度不能超过255个字符。
  5. 域名的顶级域名(例如com、net、org等)必须是有效的,且至少包含一个英文字母。
  6. 域名的顶级域名不能超过6个字符。

根据上述规则,我们可以编写相应的正则表达式来校验域名。

Java正则表达式示例

下面是一个使用Java编写的域名校验的示例代码:

import java.util.regex.Pattern;

public class DomainValidator {
    private static final String DOMAIN_PATTERN = "^(?!.{256,})(?!-)[A-Za-z0-9-]{1,63}(?<!-)(\\.[A-Za-z]{2,6})+$";
    private static final Pattern pattern = Pattern.compile(DOMAIN_PATTERN);
    
    public static boolean isValidDomain(String domain) {
        return pattern.matcher(domain).matches();
    }
    
    public static void main(String[] args) {
        String[] domains = {
                "example.com",
                "www.example.com",
                "abc-123.example.com",
                "invalid-domain",
                "long-domain-name-that-exceeds-the-maximum-length-of-63-characters-123456789012345678901234567890123456789012345678901234567890123.com",
                "example.1",
                "example.com.",
                "1.2.3.4"
        };
        
        for (String domain : domains) {
            boolean isValid = isValidDomain(domain);
            System.out.println(domain + " is " + (isValid ? "valid" : "invalid"));
        }
    }
}

在上述示例中,我们定义了一个DomainValidator类,其中包含了一个isValidDomain方法,用于校验给定的域名是否合法。该方法通过使用Pattern类和指定的正则表达式来实现域名的校验。我们还提供了一个测试用例,包含了一些常见的合法和非法域名,通过遍历测试用例,我们可以得到每个域名是否合法的结果。

总结

通过使用正则表达式,我们可以方便地校验域名的合法性。本文介绍了Java中如何编写域名校验的正则表达式,并给出了相应的代码示例。在实际开发中,我们可以根据自己的需求来调整正则表达式,以满足特定的校验规则。希望本文能够帮助您更好地理解和应用域名校验的技术。