如何使用正则表达式验证域名

下面是一篇关于如何使用正则表达式验证域名的教程。


如何使用正则表达式验证域名

简介

域名是互联网上网站的地址,每个域名由多个标签(label)组成,标签之间用点 . 分隔。域名规则有很多细节,但基本要求是:

  1. 每个标签只能包含字母、数字和短横线 -
  2. 标签的长度不能超过 63 个字符。
  3. 域名的最后一部分(即顶级域名,TLD)必须由字母组成,且至少为 2 个字符。

在本文中,我们将学习如何使用正则表达式来验证域名是否合法。

正则表达式分析

我们可以使用以下正则表达式来验证域名格式是否正确:

regex 复制代码
^(?:[a-zA-Z0-9-]{1,63}\.)+[a-zA-Z]{2,}$
解释
  1. ^$

    • ^:表示匹配字符串的开始。
    • $:表示匹配字符串的结束。通过这两个符号,我们可以确保整个字符串符合正则表达式的规则。
  2. (?: ... )

    • 这是一个非捕获组,用于将一组元素组合在一起,但是不会把它们单独捕获用于后续的处理。这里的非捕获组用于重复匹配标签部分。
  3. [a-zA-Z0-9-]{1,63}

    • [a-zA-Z0-9-]:表示标签部分可以包含小写字母、大写字母、数字和短横线 -
    • {1,63}:表示每个标签的长度应在 1 到 63 个字符之间。
  4. \.

    • \. 用于匹配点 .。由于点在正则表达式中有特殊意义(表示任何单个字符),所以我们使用反斜杠对它进行转义。
  5. +

    • + 表示前面的模式(即标签部分和点)可以重复多次,表示域名可以有多个标签部分。
  6. [a-zA-Z]{2,}

    • [a-zA-Z]:表示顶级域名(TLD)部分只可以包含字母。
    • {2,}:表示顶级域名的长度必须至少为 2 个字符。

合法的域名示例

以下是一些合法的域名,正则表达式应当能够匹配:

  • example.com
  • www.example.com
  • subdomain.example.co
  • my-website.example.org

不合法的域名示例

以下是一些不合法的域名,正则表达式会排除:

  • example..com ------ 双点 .. 不合法
  • -example.com ------ 域名标签不能以短横线 - 开头
  • example-.com ------ 域名标签不能以短横线 - 结尾
  • .example.com ------ 域名不能以点 . 开头
  • example ------ 没有顶级域名部分(缺少点)
  • example.c ------ 顶级域名长度小于 2 个字符
  • example.123 ------ 顶级域名不能包含数字

使用 Java 正则表达式进行域名验证

在 Java 中,我们可以使用 Pattern 类和 Matcher 类来编写一个方法来验证域名。以下是 Java 实现:

java 复制代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DomainValidator {
    // 域名验证正则表达式
    private static final String DOMAIN_REGEX = "^(?:[a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,}$";

    // 验证域名是否合法
    public static boolean isValidDomain(String domain) {
        // 创建模式对象
        Pattern pattern = Pattern.compile(DOMAIN_REGEX);
        // 创建匹配器对象
        Matcher matcher = pattern.matcher(domain);
        // 返回是否匹配
        return matcher.matches();
    }

    // 测试方法
    public static void main(String[] args) {
        // 测试合法域名
        System.out.println(isValidDomain("example.com"));  // true
        System.out.println(isValidDomain("www.example.com"));  // true
        System.out.println(isValidDomain("subdomain.example.co"));  // true
        System.out.println(isValidDomain("my-website.example.org"));  // true

        // 测试不合法域名
        System.out.println(isValidDomain("example..com"));  // false
        System.out.println(isValidDomain("-example.com"));  // false
        System.out.println(isValidDomain("example-.com"));  // false
        System.out.println(isValidDomain(".example.com"));  // false
        System.out.println(isValidDomain("example"));  // false
        System.out.println(isValidDomain("example.c"));  // false
        System.out.println(isValidDomain("example.123"));  // false
    }
}
解释:
  1. 正则表达式 :我们将正则表达式 DOMAIN_REGEX 定义为常量,以便在 Java 代码中使用。
  2. isValidDomain 方法 :该方法接收一个字符串参数 domain,并使用 Pattern.compile() 方法编译正则表达式,再使用 matcher.matches() 来验证输入的字符串是否符合域名格式。
  3. main 方法 :测试了多个合法和不合法的域名,以验证 isValidDomain() 方法的正确性。

总结

通过本教程,你已经学会了如何使用正则表达式来验证域名格式。我们编写了一个正则表达式,确保域名符合基本的规则:每个标签只能包含字母、数字和短横线,标签长度限制在 1 到 63 个字符之间,且顶级域名必须由字母组成且长度至少为 2 个字符。

我们还使用 Java 的 PatternMatcher 类实现了一个域名验证方法,并对合法和不合法的域名进行了测试。

希望这篇教程对你有所帮助!


相关推荐
深度学习lover4 分钟前
<项目代码>YOLOv8 番茄识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·番茄识别
IT古董5 分钟前
【机器学习】机器学习中用到的高等数学知识-1.线性代数 (Linear Algebra)
人工智能·python·线性代数·机器学习
生信与遗传解读9 分钟前
基于python的线性代数相关计算
python·线性代数·机器学习
x2lab14 分钟前
国产化 ARM 环境mysql-mariadb 部署
arm开发·mysql·docker·mariadb
Py小趴21 分钟前
Python自学之Colormaps指南
开发语言·python·数据可视化
晒足以百八十26 分钟前
基于Python 和 pyecharts 制作招聘数据可视化分析大屏
开发语言·python·信息可视化
敲代码不忘补水1 小时前
生成式GPT商品推荐:精准满足用户需求
开发语言·python·gpt·产品运营·产品经理
孤客网络科技工作室1 小时前
Python Plotly 库使用教程
python·信息可视化·plotly
悟解了1 小时前
《数据可视化技术》上机报告
python·信息可视化·数据分析
机器学习之心1 小时前
时序预测 | 改进图卷积+informer时间序列预测,pytorch架构
人工智能·pytorch·python·时间序列预测·informer·改进图卷积