首页 > 其他分享 >如何使用正则表达式验证域名

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

时间:2024-11-15 13:16:45浏览次数:3  
标签:验证 正则表达式 System 域名 isValidDomain println example

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


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

简介

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

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

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

正则表达式分析

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

^(?:[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 实现:

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 类实现了一个域名验证方法,并对合法和不合法的域名进行了测试。

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


标签:验证,正则表达式,System,域名,isValidDomain,println,example
From: https://blog.csdn.net/u011019141/article/details/143773509

相关文章

  • Python中的正则表达式教程
    一、正则表达式基础1。1。概念介绍正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同。它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式的语言里,正则表......
  • 【魔珐有言-注册/登录安全分析报告-无验证方式导致安全隐患】
    前言由于网站注册入口容易被黑客攻击,存在如下安全问题:1.暴力破解密码,造成用户信息泄露2.短信盗刷的安全问题,影响业务及导致用户投诉3.带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞所以大部分网站及App都采取图形验证码或滑动验证码等交互解决方案,但在机......
  • 【AiPPT-注册/登录安全分析报告-无验证方式导致安全隐患】
    前言由于网站注册入口容易被黑客攻击,存在如下安全问题:1.暴力破解密码,造成用户信息泄露2.短信盗刷的安全问题,影响业务及导致用户投诉3.带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞所以大部分网站及App都采取图形验证码或滑动验证码等交互解决方案,但在机......
  • 深入理解 Kubernetes 中的 Service、Ingress 和 NginxIngress:如何配置多个域名访问 Ja
    个人名片......
  • 【Azure App Service】在App Service for Windows上验证能占用的内存最大值Y5
    问题描述在创建AppService服务的时候,根据定价层不同,内存使用的最大值也有不同。但在实际测试中,发现内存最大只能占用2GB左右,而定价层中内存分配明明是大于2GB(比如B3定价层的内存为7GB),这是一种什么情况呢?在AppService中Kudu工具上,查看进程分配的内存大小:问题解答使用......
  • 数据库字段设置非空, phalcon创建数据验证不通过
    在使用phalcon的insert和update功能时,因为数据库所有的字段设置的都是NOTNULL,而phalcon的model在插入或更新之前会自动判断字段是否需要必填,因此导致有空字段时无法存入。开始遇到这问题时,想到两种解决方法:一、改数据库字段,把NOTNULL改为可以为空。但该数据库还得去找DBA......
  • 使用 Wren 语言处理登录图片验证码的自动化方法
    在自动化测试中,处理验证码图像通常是一个挑战,尤其是在登录过程中。验证码是每次都会发生变化的图片,自动化工具需要能够读取这些图像并通过图像识别技术来解码图像内容。本文将介绍如何使用Wren语言来处理登录中的图片验证码。Wren是一种轻量级、高效的编程语言,适合嵌入式系统......
  • 使用 Nim 语言处理登录图片验证码的自动化方法
    在自动化测试中,处理验证码通常是一个难题,尤其是在登录流程中。验证码图像每次刷新时都会发生变化,因此需要一种方式来自动化识别这些验证码。常见的处理方法有两种:获取验证码图片URL并下载:抓取验证码的URL地址来直接下载图片。然而,由于验证码每次都会刷新,直接访问URL获取的......
  • 【Azure App Service】在App Service for Windows上验证能占用的内存最大值
    问题描述在创建AppService服务的时候,根据定价层不同,内存使用的最大值也有不同。但在实际测试中,发现内存最大只能占用2GB左右,而定价层中内存分配明明是大于2GB(比如B3定价层的内存为7GB),这是一种什么情况呢?在AppService中Kudu工具上,查看进程分配的内存大小: 问题解答使......
  • 特殊符号和正则表达式
    特殊符号#的作用1.在一些配置文件中表示注释2.在前导符中表示root用户登录当前系统$的作用1.获取变量内容echo$PAHTecho$LANG!的作用1.强制执行|的作用1.管道符,命令拼接;的作用1.命令分隔符,不管前面的命令是否执行成功,都会去执行后面的命令,个数不限制ls......