delphi 第一个字符不能是小数点_元字符的详细解析

上一篇文章介绍了正则的用处以及正则中这些元字符的基本含义,但是如果我们只知道那些元字符的含义,不知道怎么使用和加以练习,那么对于正则我们还只是看见了门槛,并没有踏入,那么本篇文章就让我们迈起脚步正式走入正则的世界吧。let's go!

我的学习方式是:记忆元字符的含义 + 例子消化 + 案例练习

首先:咱们的思维导图来喽

6fc994915762e840246dbbbf6edcf2b3.png

a26cabcd3ec4fff166f6d2b36f83a5f4.png

一、正则的匹配和捕获

  • 匹配:test():查看字符串是否符合这个正则
  • 捕获:exec()
关于这两个方法的具体介绍,会在下一篇文章中介绍,本文章的主要内容是元字符的具体含义、使用

二、元字符详细解析

重点来喽,搬好小板凳,准备好好听课,咳咳咳!

1. ^ $

  • ^:以那个元字符开头
  • $:以那个元字符结尾
  • d:0-9的数字
  • {n}:出现n次
    • 注意点:想要使用这个,正则表达式中必须含义结尾,否则大于n的次数也是可以测试通过的,只不过捕获的时候还是捕获n个
  • [n-m]:n与m之间的任意值即可,包括n和m

例子

//匹配的是:以数字开头的字符串
let reg = /^d/;  
console.log(reg.test('name'));   //false
console.log(reg.test('2020name'));  //true
console.log(reg.test('name2020'));   //false//匹配的是:以数字结尾的字符串
let reg = /d$/;  
console.log(reg.test('name')); //false
console.log(reg.test('2020name'));  //false
console.log(reg.test('name2020'));  //true// ^/$两个都不加匹配的是:字符串中包含符合规则的内容即可
let reg1 = /d/;
//^/$两个都加匹配的是:字符串只能是和规则一致的内容
let reg2 = /^d$/

案例加强

需求:验证手机号码(11位,第一个数字是1,第二位是3-9)
//含义就是以1开头,第二个数字为3-9中的任意一个数字,其余9位随意数字(注意:必须写结尾,如果不写结尾长度大于9也是返回true可以匹配的)
let reg = /^1[3-9]d{9}$/;

2.

  • :转义字符
  • .:除n之外的任意数字 例子
// 匹配的是:以2开头 以3结尾 中间是出来换行之外的任意字符
let reg = /^2.3$/;
console.log(reg.test('2.3')); //true
console.log(reg.test('2@3')); //true
console.log(reg.test('23')); //false// 匹配的是:以2开头 以3结尾 中间是小数点
//=》也就是匹配2.3 这里的‘.’转义为了普通的‘.’
let reg = /^2.3$/;
console.log(reg.test('2.3')); //true
console.log(reg.test('2@3')); //false

案例加强

需求:匹配字符串‘ d’,设计到了的转义 (注意:在字符串中也有一些特殊意义的,他们也是需要转义的。比如n在字符串中不是字符串n而是换行)。因此对于此题的需求‘ d’,代表的是需要匹配一个和一个d
let str = 'd',reg = /^d$/;
console.log(reg.test(str));

3. x|y

  • x|y:x或y
  • ():分组或提高优先级
直接x|y会存在很乱的优先级问题,一般我们写的时候都伴随着小括号进行分组,因为小括号改变处理的优先级 => 小括号:分组

例子

//匹配的是:以18开头或者以29结尾的都可以
//以下的匹配结果都为true
let reg = /^18|29$/;
console.log(reg.test('18'));
console.log(reg.test('29'));
console.log(reg.test('129'));
console.log(reg.test('189'));
console.log(reg.test('1829'));
console.log(reg.test('182'));//匹配的是:18或者29中的一个
let reg = /^(18|29)$/;
console.log(reg.test('18'));
console.log(reg.test('29'));
console.log(reg.test('129'));
console.log(reg.test('189'));
console.log(reg.test('1829'));
console.log(reg.test('182'));

4.[]

  • 中括号出现的字符一般都代表本身的含义(特殊字符就是代表一个普通的符号:‘.’就是代表‘.’,而不是代表除换行之外的任意字符了)
  • 中括号中不存在多位数

例子

//匹配的含义是:只能是@或者+的
let reg = /^[@+]$/;
console.log(reg.test('@')); //true
console.log(reg.test('+')); //true
console.log(reg.test('@@')); //false
console.log(reg.test('@+')); //false//匹配的含义是:d还是代表0-9
let reg = /^[d]$/;
console.log(reg.test('9')); //true
console.log(reg.test('')); //false
console.log(reg.test('d')); //false//匹配的含义是:1或者8
let reg = /^[18]$/;
console.log(reg.test('1')); //true
console.log(reg.test('8')); //true
console.log(reg.test('18')); //false//匹配的含义是:1或者0-2或者9
let reg = /^[10-29]$/;
//匹配的含义是:1或者0-2或者9或(或)
let reg = /^[(10-29)]$/;

三、常用的正则表达式

3.1 验证是否为有效数字

规则分析:
  • 1.可能出现+ -号、也可能不出现,但是出现也是只有一个;
  • 2.整数位是一位的时候可以是0-9,多位的时候首位不能是0;
  • 3.小数部分可能有也可能没有,一旦有后面必须有一位:小数点+数字
/^[+-]?(d|([1-9]d+))(.d+)?$/

3.2 验证密码

规则分析
  • 数字、字母、下划线
  • 6~16位
///使用常规的写法(不用正则)
let val= userPass.value;
function check(val){if(val.length>16 || val.length<6){alert('长度不符合');return;}let area = ['a','b',...'_'];//数字,字母、下划线for(let i = 0;i<val.length;i++){let char = val[i];if(!area.includes(char)){alert('必须包含数字字母下划线');return;}  }
}//使用正则验证
/^w{6~16}$/

3.3验证真实姓名

规则:
  • 1.汉字:/^[u4E00-u9FA5]$/;
  • 2.名字长度2-10位;
  • 3.可能有译名:·汉字
//补充一个怎么打出在中间位置出现的点,哈哈,我在敲的时候也没有找到,问了度娘才知道:
//中文状态下,ESC下面的那个键就是(中文状态中文状态中文状态,重要的事情说三遍。。。哈哈)
/^[u4E00-u9FA5]{2,10}(·[u4E00-u9FA5]{2,10})?$/

3.4 验证邮箱

规则:
  • 邮箱的名字以‘数字字母下划线-.’几部分组成,但是-/.不能连续出现也不能作为开头 w+((-w+)|(.w+))*;
  • @ 后面可以加数字字母,可以出现多位 @[A-Za-z0-9]+ ;
  • 对@后面名字的补充:多域名 .http://com.cn ;企业域名 (.|-)[A-Za-z0-9]+)*
  • .com/.cn等域名 .[A-Za-z0-9]+
/^w+((-w+)|(.w+))*@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$/

3.5 身份证号

规则
  • 18位
  • 最后一位是数字或者X
  • 前6位是省市县
  • 后四位是年
  • 后两位是月 01-12
  • 后两位是日 01-31
  • 最后四位
  • 最后一位:X或者数字
  • 倒数第二位:偶数:女 奇数:男 小括号分组的作用:分组捕获,不仅可以把大正则匹配信息捕获到,还可以单独捕获到每个小分组的内容
/^([1-9]d{5})((19|20)d{2})([1-9]|10|11|12)([1-9]|[1-2]d|30|31)d{3}(d|x)$/i
以上就是使用正则中元字符的具体使用情况和项目中使用到的场景,可能不是特别全,写的不是特别细,但是小编也在努力学习中,提高知识的层次上,文学能力也在提高 (咳咳!上学的时候语文就学的不咋样,可能我就是理工科中那个学习不怎么样,但是理科生身上的那种标签却。。。哈哈,其实我们理科生偶尔也是浪漫的,不是那么的直。。。)

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

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

相关文章

前端学习(1311):请求报文

//创建网站服务器模板 const http require(http); //网站服务器对象 const app http.createServer(); //客户端有请求 app.on(request, (req, res) > {//获取请求方式//console.log(req.method);//获取请求地址//console.log(req.url);if (req.url /index || req.url /)…

jupyter中保存图片_露哥的摸爬滚打| Jupyter从零开始

今天&#xff0c;是7月的最后的一天适合结束一些东西开始一些新的东西没错我要开始新的板块啦取个名字&#xff0c;就叫做“露哥的摸爬滚打| Jupyter”01讲在前面在这里&#xff0c;主要是我的笔记或者心得&#xff0c;所以并不能保证百分百正确&#xff0c;当然也欢迎大家多多…

前端学习(1312):响应报文

//创建网站服务器模板 const http require(http); //网站服务器对象 const app http.createServer(); //客户端有请求 app.on(request, (req, res) > {//获取请求方式//console.log(req.method);//获取请求地址//console.log(req.url);//响应报文res.writeHead(200, {cont…

Java8 流式递归树形菜单

Web端常用界面 树形菜单1. 说明2. 表设计3. 普通递归4. 流式递归语法糖1. 说明 树形菜单在web后台管理系统, 权限管理中基本上很容易见到。如&#xff1a;csdn的个人后台管理系统。 只不过这个目录只有两层。三层的如下&#xff1a; 甚至可以套n层。 为什么要递归&#xff1…

catia钣金根据线段折弯_折弯大神分析钣金折弯下刀顺序

相关阅读&#xff1a;钣金折弯设计要诀&#xff0c;这就是钣金设计界的武功秘籍solidworks在钣金中折弯系数表如何设置折弯系数统计表及公司正在使用的系数表工厂在用折弯工艺规范&#xff01;折弯机模具如何选用&#xff1f;不是不能折&#xff0c;是你折弯刀不全&#xff0c;…

前端学习(1313):get请求参数

//创建网站服务器模板 const http require(http); //内置模块 const url require(url); //网站服务器对象 const app http.createServer(); //客户端有请求 app.on(request, (req, res) > {//获取请求方式//console.log(req.method);//获取请求地址//console.log(req.url…

cmd pc如何开多个微信_抖音打击刷赞刷粉,240多个百万粉丝大V被封;微信PC版再更新...

1. 微信PC版更新&#xff0c;支持在小程序中使用微信支付新榜讯 12月19日&#xff0c;微信PC端推出内测版&#xff0c;新版本支持以下新功能&#xff1a;1. 新增看一看精选内容2. 新的订阅号浏览体验3. 支持在小程序中使用微信支付2. 抖音“啄木鸟2019”行动打击刷赞刷粉&#…

回溯法 -数据结构与算法

1.回溯法算法思想&#xff1a; 定义&#xff1a; 回溯法(探索与回溯法)是一种选优搜索法&#xff0c;按选优条件向前搜索&#xff0c;以达到目标。但当探索到某一步时&#xff0c;发现原先选择并不优或达不到目标&#xff0c;就退回一步重新选择&#xff0c;这种走不通就退回再…

Idea 封装Java代码片段 快速提示

title一&#xff0c;将代码片段抽取为方法二&#xff0c;将代码封装成模板 快速提示一&#xff0c;将代码片段抽取为方法 快速生成方法快捷键 。 ctrl alt m二&#xff0c;将代码封装成模板 快速提示 步骤都在下面。 博客新域名&#xff1a; https://bitqian.blog.csdn.n…

fputc会覆盖吗_蔬菜覆盖地膜有什么好处?选择什么膜好?

大棚蔬菜种植一般都会用于地膜覆盖&#xff0c;即覆膜种植。地膜覆盖可以预先种植&#xff0c;也可以是淡季栽培&#xff0c;那么具体地膜覆盖的好处是什么呢&#xff1f;让我们来看一看地膜覆盖的好处和地膜覆盖的类型。一、用地膜覆盖蔬菜的益处1、提高地温地膜覆盖的明显效果…

前端学习(1315):路由

//引入系统模块http//创建网站服务器//为网站添加请求事件 const http require(http); const url require(url); const app http.createServer();app.on(request, (req, res) > {//获取请求方式const method req.method.toLowerCase();//获取请求地址const pathname ur…

Java四大函数式接口

Java8函数式接口1. Consumer<T> 消费型接口2. Supplier <R> 供给型接口3. Function<T, R> 函数型接口4. Predicate<T> 断定型接口5. 四大接口总结函数式接口有利于lambda表达式的编写和流式计算。在Java中定义了四种函数式接口&#xff0c; Consumer …

前端学习(1316):静态资源

//创建网站服务器模板 const http require(http); const url require(url); //网站服务器对象 const app http.createServer(); const path require(path); const fs require(fs); //客户端有请求 /* const querystring require(querystring); */ app.on(request, (req, …

Linux内核源码目录说明

Linux内核源代码位于/usr/src/linux目录下&#xff0c;其结构分布如图1.3所示&#xff0c;每一个目录或子目录可以看作一个模块&#xff0c;其目录之间的连线表示“子目录或子模块”的关系。下面是对每一个目录的简单描述。 Arch 目录包括了所有和体系结构相关的核心代码。它下…

线程,进程,并发,并行

Java util concurrent 是Java工具包&#xff0c;用于并发编程的。 1. jdk8 文档 2. 进程/线程是什么&#xff1f; 进程&#xff1a; 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元&#xff0c;在传统的操作系统中&#x…

前端学习(1317):静态资源2

//创建网站服务器模板 const http require(http); const url require(url); //网站服务器对象 const app http.createServer(); const path require(path); const fs require(fs); const mime require(mime); //客户端有请求 /* const querystring require(querystring)…

制作双足机器人用易拉罐_小学生手工小制作用易拉罐做飞机模型的方法

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。注&#xff1a;本文转载自网络&#xff0c;不代表本平台立场&#xff0c;仅供读…

Lock锁实现多线程卖票

理解多线程卖票demoLock架构使用lock替代synchronized总结使用Lock 实现。Lock架构 使用lock替代synchronized import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;/*** 企业级的多线程代码* 在高内聚低耦合情况下 多线程 操作 资源类…

小程序引入的echarts过大如何解决_解决生鲜行业“获客难”的难题,教你如何妙用小程序...

近年来&#xff0c;随着生鲜食品产业的快速发展&#xff0c;大量企业和商家加入了生鲜食品的“大本营”。但大量的企业和商家也对市场产生了一定的影响&#xff0c;不少生鲜商家陷入了一个困境——难以获得客户。当生鲜食品企业面临“获客难”的困境时&#xff0c;不妨开发一个…