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

news2024/11/18 18:11:33

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


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

简介

域名是互联网上网站的地址,每个域名由多个标签(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 类实现了一个域名验证方法,并对合法和不合法的域名进行了测试。

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


指定后缀域名验证

以下是从阿里云域名购买处获得的一些域名后缀:

.ac.cn
.ah.cn
.archi
.art
.asia
.auto
.autos
.baby
.band
.beauty
.beer
.bio
.biz
.bj.cn
.black
.blue
.bond
.cab
.cafe
.car
.cars
.cash
.cc
.center
.chat
.city
.click
.cloud
.club
.cn
.co
.college
.com
.com.cn
.company
.cool
.cq.cn
.cyou
.design
.email
.fan
.fans
.fashion
.fit
.fj.cn
.fun
.fund
.fyi
.games
.gd.cn
.global
.gold
.gov.cn
.green
.group
.gs.cn
.guru
.gx.cn
.gz.cn
.ha.cn
.hair
.hb.cn
.he.cn
.hi.cn
.hk.cn
.hl.cn
.hn.cn
.homes
.host
.icu
.info
.ink
.jl.cn
.js.cn
.jx.cn
.kim
.law
.life
.live
.ln.cn
.lotto
.love
.ltd
.luxe
.makeup
.market
.mba
.me
.media
.mo.cn
.mobi
.monster
.motorcycles
.net
.net.cn
.news
.nm.cn
.nx.cn
.online
.org.cn
.organic
.pink
.plus
.poker
.press
.pro
.promo
.protection
.pub
.pw
.qh.cn
.quest
.red
.ren
.rent
.run
.sc.cn
.school
.sd.cn
.security
.sh.cn
.shop
.shopping
.show
.site
.ski
.skin
.sn.cn
.social
.space
.storage
.store
.studio
.sx.cn
.tax
.team
.tech
.technology
.theatre
.tickets
.tj.cn
.today
.top
.tv
.tw.cn
.uno
.video
.vin
.vip
.vote
.voto
.wang
.website
.wiki
.work
.world
.xin
.xj.cn
.xyz
.xz.cn
.yachts
.yn.cn
.yoga
.zj.cn
.zone
.餐厅
.佛山
.公司
.广东
.集团
.企业
.商标
.商城
.商店
.网店
.网络
.网址
.我爱你
.游戏
.娱乐
.在线
.招聘
.中国
.中文网.ac.cn
.ah.cn
.archi
.art
.asia
.auto
.autos
.baby
.band
.beauty
.beer
.bio
.biz
.bj.cn
.black
.blue
.bond
.cab
.cafe
.car
.cars
.cash
.cc
.center
.chat
.city
.click
.cloud
.club
.cn
.co
.college
.com
.com.cn
.company
.cool
.cq.cn
.cyou
.design
.email
.fan
.fans
.fashion
.fit
.fj.cn
.fun
.fund
.fyi
.games
.gd.cn
.global
.gold
.gov.cn
.green
.group
.gs.cn
.guru
.gx.cn
.gz.cn
.ha.cn
.hair
.hb.cn
.he.cn
.hi.cn
.hk.cn
.hl.cn
.hn.cn
.homes
.host
.icu
.info
.ink
.jl.cn
.js.cn
.jx.cn
.kim
.law
.life
.live
.ln.cn
.lotto
.love
.ltd
.luxe
.makeup
.market
.mba
.me
.media
.mo.cn
.mobi
.monster
.motorcycles
.net
.net.cn
.news
.nm.cn
.nx.cn
.online
.org.cn
.organic
.pink
.plus
.poker
.press
.pro
.promo
.protection
.pub
.pw
.qh.cn
.quest
.red
.ren
.rent
.run
.sc.cn
.school
.sd.cn
.security
.sh.cn
.shop
.shopping
.show
.site
.ski
.skin
.sn.cn
.social
.space
.storage
.store
.studio
.sx.cn
.tax
.team
.tech
.technology
.theatre
.tickets
.tj.cn
.today
.top
.tv
.tw.cn
.uno
.video
.vin
.vip
.vote
.voto
.wang
.website
.wiki
.work
.world
.xin
.xj.cn
.xyz
.xz.cn
.yachts
.yn.cn
.yoga
.zj.cn
.zone
.餐厅
.佛山
.公司
.广东
.集团
.企业
.商标
.商城
.商店
.网店
.网络
.网址
.我爱你
.游戏
.娱乐
.在线
.招聘
.中国
.中文网

要求在一段文本中,用正则表达式匹配出包含我给的后缀域名的数据,正则表达式如下:

(?:[a-zA-Z0-9-]+\.)+(?:ac\.cn|ah\.cn|archi|art|asia|auto|autos|baby|band|beauty|beer|bio|biz|bj\.cn|black|blue|bond|cab|cafe|car|cars|cash|cc|center|chat|city|click|cloud|club|cn|co|college|com|com\.cn|company|cool|cq\.cn|cyou|design|email|fan|fans|fashion|fit|fj\.cn|fun|fund|fyi|games|gd\.cn|global|gold|gov\.cn|green|group|gs\.cn|guru|gx\.cn|gz\.cn|ha\.cn|hair|hb\.cn|he\.cn|hi\.cn|hk\.cn|hl\.cn|hn\.cn|homes|host|icu|info|ink|jl\.cn|js\.cn|jx\.cn|kim|law|life|live|ln\.cn|lotto|love|ltd|luxe|makeup|market|mba|me|media|mo\.cn|mobi|monster|motorcycles|net|net\.cn|news|nm\.cn|nx\.cn|online|org\.cn|organic|pink|plus|poker|press|pro|promo|protection|pub|pw|qh\.cn|quest|red|ren|rent|run|sc\.cn|school|sd\.cn|security|sh\.cn|shop|shopping|show|site|ski|skin|sn\.cn|social|space|storage|store|studio|sx\.cn|tax|team|tech|technology|theatre|tickets|tj\.cn|today|top|tv|tw\.cn|uno|video|vin|vip|vote|voto|wang|website|wiki|work|world|xin|xj\.cn|xyz|xz\.cn|yachts|yn\.cn|yoga|zj\.cn|zone|餐厅|佛山|公司|广东|集团|企业|商标|商城|商店|网店|网络|网址|我爱你|游戏|娱乐|在线|招聘|中国|中文网)

测试数据如下:

www.example.com
www.test.ac.cn
example.企业
mywebsite.中国
www.example.ac.cn
test.ah.cn
mywebsite.archi
site.com
invalidwebsite.xyz
example.bj.cn
example.com.cn
random.website
/zuankeba/3894433.html

效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Cesium】自定义材质,添加带有方向的滚动路线

【Cesium】自定义材质,添加带有方向的滚动路线 🍖 前言🎶一、实现过程✨二、代码展示🏀三、运行结果🏆四、知识点提示 🍖 前言 【Cesium】自定义材质,添加带有方向的滚动路线 🎶一、…

DDoS高防服务器:保障业务安全和稳定的抗攻击利器

摘要 随着网络攻击愈发频繁,尤其是DDoS(分布式拒绝服务)攻击的威胁不断增长,DDoS高防服务器成为保护企业网络安全的重要工具。本文将详细介绍DDoS高防服务器的原理、优势、应用场景及选择要点,帮助企业有效应对攻击&am…

vim配置 --> 在创建的普通用户下

在目录/etc/ 下面,有个名为vimrc 的文件,这是系统中公共的vim配置文件对所有用户都有效 我们现在创建一个普通用户 dm 创建好以后,我们退出重新链接 再切换到普通用户下 再输入密码(是不显示的,输入完后,…

Python 正则表达式使用指南

Python 正则表达式使用指南 正则表达式(Regular Expression, 简称 regex)是处理字符串和文本的强大工具。它使用特定的语法定义一组规则,通过这些规则可以对文本进行匹配、查找、替换等操作。Python 提供了 re 模块,使得正则表达…

Golang | Leetcode Golang题解之第565题数组嵌套

题目&#xff1a; 题解&#xff1a; func arrayNesting(nums []int) (ans int) {n : len(nums)for i : range nums {cnt : 0for nums[i] < n {i, nums[i] nums[i], ncnt}if cnt > ans {ans cnt}}return }

微服务day10-Redis面试篇

Redis主从 搭建主从集群 建立集群时主节点会生成同一的replicationID,交给各个从节点。 集群中的缓冲区是一个环型数组&#xff0c;即若从节点宕机时间过长&#xff0c;可能导致命令被覆盖。 主从集群优化 哨兵原理 哨兵是一个集群来确保哨兵不出现问题。 服务状态监控 选举…

排序算法 -快速排序

文章目录 1. 快速排序&#xff08;Quick Sort&#xff09;1.1、 简介1.2、 快速排序的步骤 2. Hoare 版本2.1、 基本思路1. 分区&#xff08;Partition&#xff09;2. 基准选择&#xff08;Pivot Selection&#xff09;3. 递归排序&#xff08;Recursive Sorting&#xff09; 2…

01、Spring MVC入门程序

概述&#xff1a; MVC(M&#xff1a;模型、V&#xff1a;视图、 C&#xff1a;控制器) 三层架构&#xff1a; 表现层&#xff08;Web层&#xff09;业务层&#xff08;Service层&#xff09;负责业务逻辑处理持久层&#xff08;Dao层&#xff09;负责和数据库交互 Spring MVC 作…

7.揭秘C语言输入输出内幕:printf与scanf的深度剖析

揭秘C语言输入输出内幕&#xff1a;printf与scanf的深度剖析 C语言往期系列文章目录 往期回顾&#xff1a; VS 2022 社区版C语言的安装教程&#xff0c;不要再卡在下载0B/s啦C语言入门&#xff1a;解锁基础概念&#xff0c;动手实现首个C程序C语言概念之旅&#xff1a;解锁关…

Android Osmdroid + 天地图 (一)

Osmdroid 天地图 前言正文一、配置build.gradle二、配置AndroidManifest.xml三、获取天地图的API Key① 获取开发版SHA1② 获取发布版SHA1 四、请求权限五、显示地图六、源码 前言 Osmdroid是一款完全开源的地图基本操作SDK&#xff0c;我们可以通过这个SDK去加一些地图API&am…

️️一篇快速上手 AJAX 异步前后端交互

AJAX 1. AJAX1.1 AJAX 简介1.2 AJAX 优缺点1.3 AJAX 前后端准备1.4 AJAX 请求基本操作1.5 AJAX 发送 POST 请求1.6 设置请求头1.7 响应 JSON 数据1.8 AJAX 请求超时与网络异常处理1.9 取消请求1.10 Fetch 发送 Ajax 请求 2. jQuery-Ajax2.1 jQuery 发送 Ajax 请求&#xff08;G…

2024年11月16日 星期六 重新整理Go技术

今日格言 坚持每天进步一点点~ 一个人也可以是一个团队~ 学习全栈开发, 做自己喜欢的产品~~ 简介 大家好, 我是张大鹏, 今天是2024年11月16日星期六, 很高兴在这里给大家分享技术. 今天又是休息的一天, 做了很多的思考, 整理了自己掌握的技术, 比如Java, Python, Golang,…

炼码LintCode--数据库题库(级别:简单;数量:55道)--刷题笔记_02

目录 炼码LintCode--数据库题库&#xff08;级别&#xff1a;简单&#xff1b;数量&#xff1a;55道&#xff09;--刷题笔记_023618 耗时前三的任务&#xff08;日期差&#xff09;题&#xff1a;sql&#xff1a;解释&#xff1a;DATEDIFF 天数差order by 别名TIMESTAMPDIFF 月…

洛谷刷题日记||基础篇8

#include <iostream> #include <vector> using namespace std;int N, M; // N为行数&#xff0c;M为列数 vector<vector<char>> field; // 表示田地的网格&#xff0c;每个元素是W或. vector<vector<bool>> visited; // 用来记录网格是否访…

在Ubuntu22.04上源码构建ROS noetic环境

Ubuntu22.04上源码构建ROS noetic 起因准备环境创建工作目录并下载源码安装编译依赖包安装ros_comm和rosconsole包的两个补丁并修改pluginlib包的CMakeLists的编译器版本编译安装ROS noetic和ros_test验证 起因 最近在研究VINS-Mono从ROS移植到ROS2&#xff0c;发现在编写feat…

从dos上传shell脚本文件到Linux、麒麟执行报错“/bin/bash^M:解释器错误:没有那个文件或目录”

[rootkylin tmp]#./online_update_wars-1.3.0.sh ba51:./online_update_wars-1.3.0.sh:/bin/bash^M:解释器错误:没有那个文件或目录 使用scp命令上传文件到麒麟系统&#xff0c;执行shell脚本时报错 “/bin/bash^M:解释器错误:没有那个文件或目录” 解决方法&#xff1a; 执行…

react+hook+vite项目使用eletron打包成桌面应用+可以热更新

使用Hooks-Admin的架构 Hooks-Admin: &#x1f680;&#x1f680;&#x1f680; Hooks Admin&#xff0c;基于 React18、React-Router V6、React-Hooks、Redux、TypeScript、Vite2、Ant-Design 开源的一套后台管理框架。https://gitee.com/HalseySpicy/Hooks-Adminexe桌面应用…

华东师范大学数学分析第五版PDF习题答案上册及下册

“数学分析”是数学专业最重要的一门基础课程&#xff0c;也是报考数学类专业硕士研究生的专业考试科目。为了帮助、指导广大读者学好这门课程&#xff0c;编者编写了与华东师范大学数学科学学院主编的《数学分析》(第五版)配套的辅导用书&#xff0c;以帮助读者加深对基本概念…

FineBI漏斗图分析转化率计算,需要获取当前节点和上一节点的转化率,需要获取错行值实现方案

FineBI漏斗图分析转化率计算&#xff0c;当前节点和上一节点的转化率&#xff0c;需要获取错行值 下面这张图大家很熟悉吧&#xff0c;非常经典的漏斗转化率分析。 从漏斗图看到需要计算转化率&#xff0c;都需要获取上一步漏斗的值&#xff0c;比如计算上一个省份的门店数量…

Solana 区块链的技术解析及未来展望 #dapp开发#公链搭建

随着区块链技术的不断发展和应用场景的扩展&#xff0c;性能和可拓展性成为各大公链竞争的关键因素。Solana&#xff08;SOL&#xff09;因其高吞吐量、低延迟和低成本的技术特性&#xff0c;在众多区块链项目中脱颖而出&#xff0c;被誉为“以太坊杀手”之一。本文将从技术层面…