如何自动获取短信验证码?

2023-09-20 08:44:06

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~

这篇文章通过解决实际项目开发中遇到的如何自动获取短信验证码的问题,进一步讲述在Java中如何使用正则。

Java中如何使用正则

Java中正则相关类位于java.util.regex包下,主要使用2个类,如下:

3d734c8e6851f1e41175b7f37db932ff.png

Pattern类:

Pattern是正则表达式regex的编译表示形式

ff9a8a5370fa14bfbb511e9a8ee229ad.png

Matcher类:

通过解释Pattern对输入的字符串input执行匹配操作的引擎

f9249ed17376ec51ef84b839c1887de2.png

注意:在Java代码中转义字符“\”要写成“\\”才表示一个“\”。

比如regex=\d,在Java代码中应该写成“\\d”。


实际问题:如何自动获取短信验证码?

短信验证码在目前的互联网应用的非常广泛,在一些重要操作中都需要输入短信验证码来验证身份信息。

列举3条不同的验证码短信内容如下:

1、【膜拜单车】您的验证码是5072.请在页面中提交验证码完成验证。

2、【大众点评】876529(大众点评网手机验证码,请完成验证),如非本人操作,请忽略本短信。

3、【百度】349865(动态验证码),请在30分钟内填写。

那么如何通过一个正则表达式来获取到3个不同类型的短信内容里的数字验证码呢?

首先分析以上3条短信内容,找出共同点:

1、验证码都是数字,可以是4位数字,也可以是6位数字

2、每条短信都包含“验证码”3个汉字

3、“验证码”3个字与数字的顺序关系,“验证码”3个字可以在数字前,也可以在数字后

有了上面的3个点,我们就可以写在正则工具里写正则表达式进行验证了。

1、4位数字或者6位数字,可以用“\d{4}|\d{6}”来匹配,我们使用捕获组( )来获取数字部分,即regex=(\d{4}|\d{6})

2、验证码3个字就用“验证码”来匹配,regex=验证码

3、“验证码”3个字在数字前,可以regex=验证码\D*(\d{4}|\d{6}),“验证码”3个字在数字后,可以regex=(\d{4}|\d{6})\D*验证码,这2个表达式是或的关系,需要用到括号来组织这2个表达式,然后再用或“|”来进行选择,即regex=(验证码\D*(\d{4}|\d{6}))|((\d{4}|\d{6})\D*验证码)

4、由于要通过捕获组( )来获取数字内容,又要用括号来组织关系,因此需要把或“|”两边的表达式部分用非捕获组(?:)来标记,因为我们只需要获取数字部分的括号( )匹配到的数字。即regex=(?:验证码\D*(\d{4}|\d{6}))|(?:(\d{4}|\d{6})\D*验证码)

如果这里看不懂的话,请看《一篇文章学会正则表达式的语法》的相关内容。

最后我们把分析到的表达式代入到Java代码完成功能。注意在Java中,反斜杠需要转义,即一杠变二杠。

a1b4e97ba2a4ee230116e68df34e1ff4.png

运行结果如下:

5084513b5dcda9136d720f4b73d8c624.png

如果想获取以上的源代码,请在后台回复关键词“正则源码”获取。


推荐一个正则工具“RegexBuddy”,在后台回复关键词“正则表达式”获取。

更多推荐

JDK动态代理

Java中的两种常用动态代理方式JDK动态代理和Cglib动态代理是Java中常用的实现动态代理的方式。它们都可以在运行时生成代理类,实现对目标对象的代理操作。JDK动态代理适用于接口代理,Cglib动态代理适用于类代理。Cglib动态代理Cglib动态代理是基于继承的动态代理方式。它通过生成目标类的子类来实现代理,子

3.SpringEL方法调用实例

SpringEL方法调用实例文章目录SpringEL方法调用实例介绍SpringEL在注解的形式SpringEL调用List,Map中的方法**从List中过滤元素****从Map中获取值**SpringEL在XML的形式介绍Spring表达式语言(使用SpEL)允许开发人员使用表达式来执行方法和将返回值以注入的方式到

线路板的性能和技术要求有哪些

PCB加工厂家电路板的性能和技术要求与线路板的结构类型、选用的基材有关。不同类型(刚性和挠性)、不同结构(单面、双面、多层、有或无盲孔、埋孔等)、不同基材的PCB板,性能指标是不同的。它的性能等级,与产品设计一样按使用范围通常分为三个等级,PCB厂家描述产品在复杂性、功能性要求的程度和试验、检验的频度的不同。不同性能等

java 单元测试Junit

所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试。为了测试更加方便,有一些第三方的公司或者组织提供了很好用的测试框架,给开发者使用。这里介绍一种Junit测试框架。Junit是第三方公司开源出来的,用于对代码进行单元测试的工具(IDEA已经集成了junit框架)。相比于在main方法中测试有如下几个

[设计模式] 浅谈SOLID设计原则

目录单一职责原则开闭原则里氏替换原则接口隔离原则依赖倒转原则SOLID是一个缩写词,代表以下五种设计原则单一职责原则SingleResponsibilityPrinciple,SRP开闭原则Open-ClosedPrinciple,OCP里氏替换原则LiskovSubstitutionPrinciple,LSP接口隔离

华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

目录专栏导读一、题目描述二、输入描述三、输出描述四、解题思路特别鸣谢:感谢fly晨发现这个问题,并提供更优质的算法。解题思路如下:五、Java算法源码六、效果展示1、输入2、输出3、思路专栏导读本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释

模式识别与人工智能(程序与算法)系列讲解 - 总目录

模式识别与人工智能(程序与算法)系列讲解-总目录作者:安静到无声作者简介:人工智能和硬件设计博士生、CSDN与阿里云开发者博客专家,多项比赛获奖者,发表SCI论文多篇。Thanks♪(・ω・)ノ如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!o( ̄▽ ̄)dლ(°◕‵ƹ′◕ლ)希望在传播知识、分享

【算法系列 | 8】深入解析查找算法之—二分查找

序言心若有阳光,你便会看见这个世界有那么多美好值得期待和向往。决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。我们一起努力,成为更好的自己!今天第8讲,讲一下查找算法的二分查找1基础介绍查找算法是很常见的一类问题,主要是将一组数据按照某种规则进行排序。以下是一些常见的查找算法及其应

通过 chatgpt 协助完成网站数据破解

Chatgpt的出现极大地提升了程序员的工作效率,常见的使用场景包括代码自动生成、代码静态检查等,那么chatgpt能否用于某些网站的数据破解工作呢?问题某天线上服务开始报警,原来是某个视频网站无法获取到其cdn地址导致的下载失败问题。经过debug发现原来的明文数据现在变成了加密数据(数据放在html中),如下由于职

Boostrap对HTML的表格的设计和优化

目录01-Bootstrap的默认表格风格02-没有边线-边界的表格03-行与行的背景颜色交替变换(条纹样式)04-给表格加上边框效果05-鼠标移到行上时该行的颜色加深06-把表格的padding值缩减一半,使表格看起来更紧凑07-为表格的行或单元格设置颜色01-Bootstrap的默认表格风格Bootstrap对表格

生信分析Python实战练习 9 | 视频27

开源生信Python教程生信专用简明Python文字和视频教程源码在:https://github.com/Tong-Chen/Bioinfo_course_python目录背景介绍编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Pyt

热文推荐