正则表达式写起来不简单,但用起来真香

news2024/9/19 10:36:05

说在前面

🎈整理一些常见常用的正则表达式。

常见的正则表达式

1、手机号码

/^[1][3456789][0-9]{9}$/

这个正则表达式 /^[1][3456789][0-9]{9}$/ 用于匹配中国的手机号码的一部分,但不包括全部有效的手机号码格式。下面是对它的详细解释:

  1. ^:表示匹配字符串的开始。

  2. [1]:手机号码以数字 1 开头。

  3. [3456789]:第二位数字可以是 3456789,排除了以 12 开头的号码,这符合中国手机号码的分配规则,其中 1315 开头的号码被分配给了其他用途。

  4. [0-9]{9}:接下来的是9个数字,这代表手机号码的剩余部分。

  5. $:表示匹配字符串的结束。

将这些组合起来,这个正则表达式匹配的是一个以 1 开头,第二位是 39 之间的数字,后面紧跟着9个数字的字符串,符合中国大陆部分手机号码的标准格式(11位数字,以13x、14x、16x、17x、18x或19x开头)的一部分。

例如,以下号码的一部分会被匹配:

  • 139(部分匹配,完整号码可能是 13912345678
  • 158(部分匹配,完整号码可能是 15800012345

请注意,这个正则表达式只匹配了手机号码的前两位和最后九位数字,并没有匹配完整的手机号码格式。此外,由于手机号码的分配可能会随时间变化,这个正则表达式可能需要更新以适应新的号码分配规则。

2、邮箱

/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/

这个正则表达式 ^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$ 用于验证电子邮件地址的格式。下面是对它的详细解释:

  1. ^:表示匹配字符串的开始。

  2. ([A-Za-z0-9_\-\.])+:这部分是一个捕获组,匹配一个或多个以下字符:

    • 大写字母 AZ
    • 小写字母 az
    • 数字 09
    • 下划线 _
    • 连字符 -
    • .
  3. \@:匹配字面意义上的 @ 符号。@ 在正则表达式中是一个特殊字符,通常需要使用反斜线 \ 进行转义。

  4. ([A-Za-z0-9_\-\.])+:这部分与第一个捕获组相同,匹配邮箱用户名部分,即 @ 符号后的局部部分。

  5. \.:匹配字面意义上的点 .。由于点 `.’ 在正则表达式中也是一个特殊字符,表示任意单个字符,因此也需要转义。

  6. ([A-Za-z]{2,4}):这是一个捕获组,匹配顶级域名(TLD):

    • 大写字母 AZ 或小写字母 az
    • {2,4} 表示前面的字符组合必须连续重复2到4次,这符合大多数顶级域名的长度。
  7. $:表示匹配字符串的结束。

将这些组合起来,这个正则表达式匹配的是一个标准的电子邮件地址,它包含:

  • 一个或多个字母、数字、下划线、连字符或点作为用户名。
  • 紧跟一个 @ 符号。
  • 然后是域名,由一个或多个字母、数字、下划线、连字符或点组成。
  • 最后是一个点 . 跟着2到4个字母的顶级域名。

例如,以下电子邮件地址会被匹配:

  • example@test.com
  • user.name@sub.domain.org

而以下电子邮件地址则不会被匹配:

  • example@.com(没有本地部分)
  • example@test..com(顶级域名前有额外的点)
  • example@test_c(顶级域名不是2到4个字符长)

请注意,电子邮件地址的规范可能比这个正则表达式允许的要复杂得多,而且这个正则表达式没有考虑到新的顶级域名可能超过4个字符的情况。因此,对于电子邮件验证,可能需要一个更复杂的正则表达式或者使用专门的验证库。

3、身份证

/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/

这个正则表达式 /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/ 用于匹配中国的二代身份证号码,它包含了出生日期和校验码。下面是对它的详细解释:

  1. ^:表示匹配字符串的开始。

  2. [1-9]:匹配从1到9的任意一个数字,身份证号码第一位不可能是0。

  3. \d{5}:匹配紧随其后的5个数字,代表身份证号码的前5位。

  4. (18|19|([23]\d)):匹配18或19或23后跟任意一个数字,代表出生年份的前两位。

  5. \d{2}:匹配出生年份的后两位数字。

  6. ((0[1-9])|(10|11|12)):匹配月份,可以是01到09或10到12。

  7. (([0-2][1-9])|10|20|30|31):匹配日期,可以是01到29或10、20、30、31。

  8. \d{3}:匹配年份和日期后的3位数字,代表校验码前面的顺序码。

  9. [0-9Xx]:匹配最后一位校验码,可以是0到9的任意一个数字或大写X/小写x。

  10. $:表示匹配字符串的结束。

将这些组合起来,这个正则表达式匹配的是一个符合中国二代身份证号码格式的18位数字字符串,其中:

  • 前6位是地区代码。
  • 接下来的8位是出生年月日(YYYYMMDD)。
  • 紧随其后的是3位顺序码,其中奇数分配给男性,偶数分配给女性。
  • 最后一位是校验码,可以是0到9的数字或X/x字母。

例如,以下身份证号码会被匹配:

  • 110105197601011234
  • 37132519880214566X

而以下身份证号码则不会被匹配:

  • 110000197601011234(地区代码不可能全是0)
  • 110105186601011234(出生年份不可能小于1800)
  • 110105197601131234(日期不可能超过31)

请注意,这个正则表达式只进行了基本的格式验证,并没有考虑到所有可能的合法性问题,如闰月、世纪年等特殊情况。实际应用中,可能需要结合其他方法来确保身份证号码的准确性和有效性。

4、URL

/^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

这个正则表达式 /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ 用于匹配通用的 URL 地址。下面是对它的详细解释:

  1. ^:表示匹配字符串的开始。

  2. ((https?|ftp|file):\/\/)?:这是一个可选的捕获组,匹配协议部分,可以是 httphttpsftpfile,后面跟着 ://。整个捕获组出现0次或1次,表示协议部分可以省略。

    • https?:匹配 httphttps
    • ftp:匹配 ftp
    • file:匹配 file
  3. ([\da-z\.-]+):匹配域名部分,可以包含数字、小写字母、点和连字符。

  4. \.:匹配字面意义上的点。

  5. ([a-z\.]{2,6}):匹配顶级域,可以是2到6个小写字母或点。这符合大多数顶级域名的长度。

  6. ([\/\w \.-]*):匹配路径部分,可以包含斜杠、字母、数字、空格、点或连字符。这个组可以出现0次或多次,表示路径部分可以是可选的。

  7. *:表示前面的路径部分可以重复任意次,包括0次。

  8. \/?:匹配可选的斜杠,表示路径可能以斜杠结束或不结束。

  9. $:表示匹配字符串的结束。

将这些组合起来,这个正则表达式匹配的是一个通用的 URL 地址,它包含:

  • 可选的协议部分(http, https, ftp, file)。
  • 域名部分,由数字、小写字母、点和连字符组成。
  • 顶级域,由2到6个小写字母或点组成。
  • 可选的路径部分,由斜杠、字母、数字、空格、点或连字符组成,路径可以包含多个段。
  • 整个 URL 可以以斜杠结束或不结束。

例如,以下 URL 地址会被匹配:

  • http://www.example.com
  • https://www.example.com/path/to/resource
  • ftp://ftp.example.com/dir/file.txt
  • file:///path/to/local/file
  • example.com

而以下 URL 地址则不会被匹配:

  • http:///example.com(缺少协议的 “😕/” 部分)
  • http://example(缺少顶级域)
  • http://example.c(顶级域太短)
  • http://example.com/invalid-/./path(路径中包含无效字符)

请注意,由于 URL 的复杂性,这个正则表达式可能无法匹配所有有效的 URL,也无法验证 URL 的合法性。对于更准确的 URL 验证,可能需要使用更复杂的正则表达式或专门的验证库。

5、微信号

/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/

6至20位,以字母开头,字母,数字,减号,下划线

  1. ^:表示匹配字符串的开始。

  2. [a-zA-Z]:匹配一个字母,可以是大写或小写,作为字符串的起始字符。

  3. ([-_a-zA-Z0-9]{5,19}):这是一个捕获组,匹配以下内容:

    • [-_a-zA-Z0-9]:一个字符,可以是连字符 -、下划线 _、字母(大写或小写)或数字。
    • {5,19}:指定前面的字符组合至少重复5次,最多重复19次。这意味着整个捕获组的长度为6到20个字符。
  4. +:表示前面的捕获组可以重复一次或多次。由于第一个字符已经匹配了一个字母,整个模式至少需要一个捕获组,因此整个字符串的长度至少为6个字符。

  5. $:表示匹配字符串的结束。

将这些组合起来,这个正则表达式匹配的是一个以字母开头,后跟5到20个字符(可以是连字符、下划线、字母或数字)的字符串,整个字符串长度至少为6个字符。每个部分的字符可以是大写或小写。

例如,以下字符串会被匹配:

  • user_123
  • profile
  • Name-1234
  • Abcdefghijk

而以下字符串则不会被匹配:

  • 123(以数字开头)
  • _username(以下划线开头)
  • user(长度小于6个字符)
  • toolongusername12345678901234567890(长度超过20个字符)

请注意,这个正则表达式是根据特定规则设计的,不同的应用场景可能需要不同的正则表达式规则。

6、车牌号

/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/

这个正则表达式 /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/ 用于匹配中国大陆的机动车车牌号码。下面是对它的详细解释:

  1. ^:表示匹配字符串的开始。

  2. [京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]:这是一个字符集,匹配车牌号码的第一个字符,可以是中国大陆各个省份的汉字缩写(如“京”代表北京,“沪”代表上海等),或者是一个介于 AZ 之间的任何一个大写字母,也可以是“使”、“领”等特殊字符。

  3. {1}:表示前面的字符集中的任意一个字符正好出现一次。

  4. [A-Z]:匹配一个介于 AZ 之间的任何一个大写字母,这通常代表车牌号码中的字母部分。

  5. {1}:表示前面的字符集中的任意一个字符正好出现一次。

  6. [A-Z0-9]{4}:匹配四个字符,可以是大写字母或数字,这通常代表车牌号码中的数字和字母组合部分。

  7. [A-Z0-9挂学警港澳]:这是一个字符集,匹配车牌号码的最后一个字符,可以是大写字母、数字或者特定的字符(如“挂”、“学”、“警”、“港”、“澳”)。

  8. {1}:表示前面的字符集中的任意一个字符正好出现一次。

  9. $:表示匹配字符串的结束。

将这些组合起来,这个正则表达式匹配的是一个符合中国大陆机动车车牌号码格式的字符串,其中:

  • 第一个字符是省份缩写或特定的大写字母。
  • 第二个字符是一个大写字母。
  • 接下来的四个字符是字母和数字的组合。
  • 最后一个字符是大写字母、数字或特定的字符。

例如,以下车牌号码会被匹配:

  • 京A1234挂
  • 沪B5678学
  • 苏D0099警

而以下车牌号码则不会被匹配:

  • 京A123(长度不足)
  • 京A1234ABC(长度超出或格式不正确)
  • 京A12344(最后一个字符不符合规定)

请注意,由于车牌号码的格式可能会有所变化,这个正则表达式可能需要根据最新的车牌号码规则进行相应的调整。

7、IP地址

/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/

这个正则表达式 /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ 用于精确匹配 IPv4 地址。下面是对它的详细解释:

  1. ^:表示匹配字符串的开始。

  2. (?: ... ):非捕获括号,用于分组而不捕获匹配的文本,这对于使用量词(如 {3})是必要的。

  3. 25[0-5]:匹配 250 到 255。

  4. 2[0-4][0-9]:匹配 200 到 249。

  5. 0[1-9][0-9]?1[0-9][0-9]?[1-9]?[0-9]?:匹配 0 到 199。这里允许单个数字(0-9)或两位数字(10-99),以及可选的前导零。

  6. \.:匹配字面意义上的点(. 在正则表达式中通常表示任意单个字符,因此需要用反斜线转义)。

  7. {3}:表示前面的非捕获括号内的模式重复恰好3次,用于匹配 IPv4 地址的前三个八位字节。

  8. (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?):这与前面的模式相同,匹配 IPv4 地址的最后一个八位字节。

  9. $:表示匹配字符串的结束。

将这些组合起来,这个正则表达式确保每个八位字节都在合法的范围内,即 0 到 255,并且整个字符串正好是一个 IPv4 地址,不包含任何前缀或后缀。

例如,以下 IP 地址会被匹配:

  • 192.168.1.1
  • 10.0.0.10
  • 255.255.255.255

而以下字符串则不会被匹配:

  • 0.0.0.0(虽然有效,但不符合一些人对私有IP地址的过滤标准)
  • 192.168.1
  • 192.168.1.1.1(多了一个八位字节)
  • 123.45.6.789(八位字节超出范围)

请注意,这个正则表达式只匹配标准的 IPv4 地址格式,不匹配 IPv6 地址,也不考虑任何特殊的网络协议或配置细节。

8、十六进制颜色值

/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/

这个正则表达式 /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/ 用于匹配 CSS 中的十六进制颜色代码。下面是对它的详细解释:

  1. ^:表示匹配字符串的开始。

  2. #?:匹配 # 符号零次或一次。问号 ? 表示前面的字符 # 是可选的。

  3. ([a-fA-F0-9]{6}|[a-fA-F0-9]{3}):这是一个组合的捕获组,用于匹配两种不同长度的十六进制颜色代码:

    • [a-fA-F0-9]{6}:匹配恰好六个十六进制数字(0-9 或 a-f)。这是完整的十六进制颜色代码,例如 1a2b3c

    • [a-fA-F0-9]{3}:匹配恰好三个十六进制数字。这是简写的十六进制颜色代码,其中每个数字被重复两次以形成完整的颜色代码,例如 123 等同于 112233

    • |:逻辑“或”运算符,用于匹配捕获组中的任意一种模式。

  4. $:表示匹配字符串的结束。

将这些组合起来,这个正则表达式匹配的是一个可选的 # 符号后跟六个或三个十六进制数字的字符串,这符合 CSS 中十六进制颜色代码的标准格式。

例如,以下颜色代码会被匹配:

  • #1a2b3c
  • abc123
  • a1b2c3
  • 123

而以下字符串则不会被匹配:

  • #1a2b3g(包含无效的十六进制字符 ‘g’)
  • 1a2b3c4d(包含多余的十六进制数字)
  • #xyz(虽然 #xyz 是有效的 CSS 颜色代码,但它不符合这个正则表达式的规则,因为它要求是六个或三个十六进制数字)

请注意,CSS 还支持其他颜色表示方法,如 RGB、RGBA、HSL 或颜色名称,这个正则表达式仅用于匹配十六进制颜色代码。

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

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

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

相关文章

项目三OpenStack基础环境配置与API使用

任务一 了解OpenStack基础环境配置 1.1 •数据库服务器 1.2 •消息队列服务 •AMQP系统的组成 任务二 了解并使用OpenStack API 2.1 •什么是RESTful API • RESTful API 是目前比较成熟的 一套Internet应用程序的API软件架构 。 • 表现 层( Representation …

JavaWeb项目配置教程

将你的项目(只有代码的文件,不是整个文件)拖入idea 找到数据库配置代码(一般在Util包里面,或者是properties配置文件)并将密码修改为你的数据库密码。 点击Edit Configurations 点击Configure&#xff0…

突破数据存储瓶颈!转转业财系统亿级数据存储优化实践--图文解析

突破数据存储瓶颈!转转业财系统亿级数据存储优化实践–图文解析 原文链接:https://juejin.cn/post/7358704806779437097 原文作者:转转技术团队 业财系统:业务和财务一体化系统 与传统财务记账不同,一笔金额不再是…

LED电子看板在提升企业数字化管理的应用价值

本文详细探讨 LED 电子看板在企业数字化管理中的应用价值,包括实时数据展示、可视化管理、提高生产效率、优化决策等方面,通过实际案例分析,阐述了其对企业发展的重要性。在当今数字化时代,企业管理面临着越来越多的挑战和机遇。为…

企业IT资源使用共享云桌面集中管理的优势

随着信息技术的飞速发展,企业面临着日益增长的IT资源需求和管理挑战。为了解决这一问题,越来越多的企业开始采用云桌面集中管理方案,以实现IT资源的共享和优化。 为保持企业各部门信息化和数字化业务顺利运转,IT需要耗费大量支持…

【BFS算法】广度搜索·由起点开始逐层向周围扩散求得最短路径(算法框架+题目)

0、前言 深度优先搜索是DFS(Depth Frst Search),其实就是前面所讲过的回溯算法,它的特点和它的名字一样,首先在一条路径上不断往下(深度)遍历,获得答案之后再返回,再继续往下遍历。…

使用SQLite

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 与许多其他数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是一种嵌入式数据库,它的数据库就…

微量氧传感器在3D打印中的应用

3D打印为什么需要监测氧气? 金属 3D 打印过程涉及使用激光技术将细金属粉末一层一层地熔合在一起。在制造零件的同时将杂质风险降至比较低是金属增材制造行业面临的主要挑战。金属 3D 打印机通常将其原料送入惰性环境中,以消除污染并防止质量问题。氩气…

【自撰写】【国际象棋入门】第6课 常见术语分析(一)吃双和抽将

第6课 常见术语分析(一)吃双和抽将 本次课中,我们介绍几种最为常见和常用的(单步棋形成)的局面、术语并对其进行简单的分析。一般说来,这些局面都会给予一方以“立竿见影”的优势,或者引向之后…

瑞尼克定制聚四氟乙烯布氏漏斗配抽滤瓶四氟抽滤装置药厂

一、产品介绍 布氏漏斗是实验室中使用的一种仪器,用来使用真空或负压力抽吸进行过滤。布氏漏斗可代替陶瓷布氏漏斗,避免碎裂,聚四氟乙烯材质的布氏漏斗性强,使用真空或负压力抽吸进行过滤也可与吸滤瓶配套,用于无机制…

window 卸载应用商店程序

# 使用Get-AppxPackage获取所有应用程序 # 使用Remove-AppxPackage PythonSoftwareFoundation.Python.3.12_3.12.1264.0_x64__qbz5n2kfra8p0

2024请收好这一份全面--详细的AI产品经理从业指南

前言 入行人工智能领域这段时间以来,从零到一把AI推荐系统产品化搭建了起来,也与很多同行AI产品经理小伙伴建立了联系。AI产品经理工作内容各异,不同AI产品化生命周期中更是大为不同,但对想入行AI产品经理的小伙伴来讲&#xff0…

聊一聊生成式AI

生成式AI(Generative AI)是指一类能够自主创造新内容的人工智能技术,这些内容可以是文本、图像、音频、视频等。与传统的分析性或分类性AI系统不同,生成式模型的主要任务不是对现有数据进行分类或预测,而是生成全新的、…

【C语言 || 排序】希尔排序

文章目录 前言1.希尔排序1.1 直接插入排序1.2 直接插入排序的实现1.2.1 直接插入排序的代码实现 1.3 直接插入排序的时间复杂度1.4 希尔排序1.4.1 希尔排序概念1.4.1 希尔排序的代码实现 前言 1.希尔排序 1.1 直接插入排序 在写希尔排序之前,我们需要先了解直接插入…

电压模式R-2R DAC的工作原理和特性

本文将探讨电压模式R-2R DAC结构。 在本文中,我们将探索什么是R-2R DAC以及如何实现它们。 首先,我们将简要回顾一下开尔文分压器DAC。这种结构很简单,但它们需要大量的电阻和开关来实现高分辨率DAC。这个问题的一个解决方案是称为R-2R DAC…

【python】用代码实现2024中科大强基计划数学科目第一题

题目: 已知正整数a,b,c满足10a11b12c123,,则(a,b,c)的组数是 思路: 为了找出满足等式 10a 11b 12c 123 的正整数三元组 (a, b, c) 的数量,我们可以使用Python编写一个简单的循环来遍历可能的 a、b 和…

哪种考勤机好用,常见好用的考勤机种类

哪种考勤机好用,常见好用的考勤机种类 用考勤机完成上下班打卡制度,极大地为人事对公司的管理提供了便利。不同种类的考勤机均有各自的长处,那么究竟哪种考勤机比较好用呢?其中,智能云考勤机能够实现异地手机打卡&…

推荐一个Python的前端框架Streamlit

WHY,为什么要用Streamlit 你是不是也想写一个简单的前端界面做些简单的展示和控制,不想写html、css、js,也用不到前后端分离,用不到特别复杂的Flask、Django等,如果你遇到类似这样的问题,我推荐你试试Stre…

Linux下调试代码——gdb的使用

1. 文件准备: 测试代码: Makefile文件: 执行结果: 此时,我们的结果是存在问题的,即最终结果少了100。现在我们用gdb来调试它。 我们发现我们还没有安装gdb,这里安装一下。 2. 环境准备&#…

CUDA系列-Mem-9

这里写目录标题 Static Architecture.Abstractions provided by CUSW_UNIT_MEM_MANAGERMemory Object (CUmemobj) Memory Descriptor(CUmemdesc)Memory Block(CUmemblock)Memory BinsSuballocations in Memory BlockFunctional description Memory Manager 你可能觉得奇怪&…