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

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


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

简介

域名是互联网上网站的地址,每个域名由多个标签(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"));  // trueSystem.out.println(isValidDomain("www.example.com"));  // trueSystem.out.println(isValidDomain("subdomain.example.co"));  // trueSystem.out.println(isValidDomain("my-website.example.org"));  // true// 测试不合法域名System.out.println(isValidDomain("example..com"));  // falseSystem.out.println(isValidDomain("-example.com"));  // falseSystem.out.println(isValidDomain("example-.com"));  // falseSystem.out.println(isValidDomain(".example.com"));  // falseSystem.out.println(isValidDomain("example"));  // falseSystem.out.println(isValidDomain("example.c"));  // falseSystem.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.rhkb.cn/news/473700.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中的正则表达式教程

一、 正则表达式基础 1。1。概念介绍 正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。 其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同。 它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式…

2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell图解步骤

实验环境准备(同一个网段下,我是桥接的虚拟机) 一、bash反弹shell 二、python反弹shell 三、nc反弹shell 四、villain反弹shell 实验环境准备(同一个网段下,我是桥接的虚拟机) 一台kali的linux(攻击者)…

Nginx server_name配置错误导致路由upstream超时问题

一、问题描述 某次本平台和外部平台接口调用,同样Nginx location配置,测试环境调用正常,生产环境调用返回失败; 相关链接:Nginx官方文档、server_name、How nginx processes a request 二、排查处理 1&#xff09…

6.584-Lab1:MapReduce

前置知识/概念 Raft 是一个基于“Leader”的协议,能够保证分布式网路的一致性。 RPC(Remote Producer Call) 参考链接1 参考链接2 Go中RPC的简单实现 Golang中regexp正则表达式的用法 https://gukaifeng.cn/posts/golang-zheng-ze-biao-…

脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾

这一轮硬件创新由 AI 引爆,或许最大受益者仍是 AI,因为只有硬件才能为 AI 直接获取最真实世界的数据。 在人工智能与硬件融合的新时代,实时互动技术正迎来前所未有的创新浪潮。从嵌入式系统到混合现实,从空间视频到脑机接口&…

Restful API接⼝简介及为什么要进⾏接⼝压测

一、RESTful API简介 在现代Web开发中,RESTful API已经成为一种标准的设计模式,用于构建和交互网络应用程序。本文将详细介绍RESTful API的基本概念、特点以及如何使用它来设计高效的API接口。 1. 基于协议 HTTP 或 HTTPS RESTful API通常使用HTTP&am…

面试经典 150 题:20、2、228、122

20. 有效的括号 参考代码 #include <stack>class Solution { public:bool isValid(string s) {if(s.size() < 2){ //特判&#xff1a;空字符串和一个字符的情况return false;}bool flag true;stack<char> st; //栈for(int i0; i<s.size(); i){if(s[i] ( |…

Python爬虫下载新闻,Flask展现新闻(2)

上篇讲了用Python从新闻网站上下载新闻&#xff0c;本篇讲用Flask展现新闻。关于Flask安装网上好多教程&#xff0c;不赘述。下面主要讲 HTML-Flask-数据 的关系。 简洁版 如图&#xff0c;页面简单&#xff0c;主要显示新闻标题。 分页&#xff0c;使用最简单的分页技术&…

基于Java和Vue实现的上门做饭系统上门做饭软件厨师上门app

市场前景 生活节奏加快&#xff1a;在当今快节奏的社会中&#xff0c;越来越多的人因工作忙碌、时间紧张而无法亲自下厨&#xff0c;上门做饭服务恰好满足了这部分人群的需求&#xff0c;为他们提供了便捷、高效的餐饮解决方案。个性化需求增加&#xff1a;随着人们生活水平的…

【配置后的基本使用】CMake基础知识

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;各种软件安装与配置_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1.…

Centos 7 安装wget

Centos 7 安装wget 最小化安装Centos 7 的话需要上传wget rpm包之后再路径下安装一下。rpm包下载地址&#xff08;http://mirrors.163.com/centos/7/os/x86_64/Packages/&#xff09; 1、使用X-ftp 或者WinSCP等可以连接上传的软件都可以首先连接服务器&#xff0c;这里我用的…

Linux最深刻理解页表于物理内存

目录 物理内存管理 页表设计 物理内存管理 如果磁盘上的内容加载到物理内存上&#xff0c;每次io都会按照4kb的方式进行加载(可能不同版本系统有些区别)。所以我们的物理内存上的内容也是4个字节进行管理的。 而每个页框都需要我们进行管理。所以自然物理内存就会对页框进行先…

几何合理的分片段感知的3D分子生成 FragGen - 评测

FragGen 来源于 2024 年 3 月 25 日 预印本的文章&#xff0c;文章题目是 Deep Geometry Handling and Fragment-wise Molecular 3D Graph Generation&#xff0c; 作者是 Odin Zhang&#xff0c;侯廷军&#xff0c;浙江大学药学院。FragGen 是一个基于分子片段的 3D 分子生成模…

PySpark——Python与大数据

一、Spark 与 PySpark Apache Spark 是用于大规模数据&#xff08; large-scala data &#xff09;处理的统一&#xff08; unified &#xff09;分析引擎。简单来说&#xff0c; Spark 是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器集群&#xff0c;计算 TB 、…

基于Java Springboot编程语言在线学习平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

WebRTC视频 02 - 视频采集类 VideoCaptureModule

WebRTC视频 01 - 视频采集整体架构 WebRTC视频 02 - 视频采集类 VideoCaptureModule&#xff08;本文&#xff09; WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇 WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇 一、前言…

深度学习笔记14-卷积神经网络2

1.卷积神经网络的结构 卷积神经网络&#xff0c;是包含卷积运算且具有深度结构的前馈神经网络。在卷积神经网络中&#xff0c;包含卷积层、池化层和全连接层三种重要的结构。相比前馈神经网络&#xff0c;卷积层和池化层是新增的网络结构&#xff0c;在提取特征时&#xff0c;卷…

Python 正则表达式使用指南

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

FPGA开发-逻辑分析仪的应用-数字频率计的设计

目录 逻辑分析仪的应用 数字频率计的设计 -基于原理图方法 主控电路设计 分频器设计 顶层电路设计 数字系统开发不但需要进行仿真分析&#xff0c;更重要的是需要进行实际测试。 逻辑分析仪的应用 测试方式&#xff1a;&#xff08;1&#xff09;传统的测试方式&#…

.NET 9.0 中 System.Text.Json 的全面使用指南

以下是一些 System.Text.Json 在 .NET 9.0 中的使用方式&#xff0c;包括序列化、反序列化、配置选项等&#xff0c;并附上输出结果。 基本序列化和反序列化 using System; using System.Text.Json; public class Program {public class Person{public string Name { get; se…