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

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

这篇文章通过解决实际项目开发中遇到的如何自动获取短信验证码的问题,进一步讲述在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”,在后台回复关键词“正则表达式”获取。

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

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

相关文章

精心制作的小游戏,没有人玩,失落......

引言 昨天有粉丝问我:大佬你好,前阵子我做了一款微信小游戏并且成功的上线了,但是发现并没有人玩,每天零零散散的几个人,有点失落,我觉得自己做的游戏还是挺好玩的,有没有什么办法可以让更多的人能够玩我的小游戏呢? 在粉丝的问题中,笔者仿佛看到了曾…

10路LED驱动器和GPIO控制器禾润HTR3310

供电范围:2.5V~5.5V 10个多功能IO,支持LED驱动或GPIO(电流源调光) LED模式下具有256阶线性调光 任意IO可配置为独立的输入或输出 中断功能,8μs防抖,低电平有效 标准I2C接口,4个I2C器件地址…

栈和队列1——栈的实现及其oj(括号匹配问题)

一,栈的概念 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&#xf…

Otter改造 增加springboot模块和HTTP调用功能

环境搭建 & 打包 环境搭建: 进入 $otter_home/lib 目录执行:bash install.sh 打包: 进入$otter_home目录执行:mvn clean install -Dmaven.test.skip -Denvrelease发布包位置:$otter_home/target 项目背景 阿里…

C# OpenCvSharp 图片模糊检测(拉普拉斯算子)

效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Windows.Forms.VisualStyl…

Python —— pytest框架

1、认识pytest框架 1、搭建自动化框架的思路与流程 1、搭建自动化测试框架的思路和流程,任意测试手段流程都是一致的:手工测试、自动化测试、工具测试 手工测试:熟悉业务 —— 写用例 —— 执行用例并记录结果 —— 生成测试报告自动化测试…

stack与queue的简单封装

前言: stack与queue即栈和队列,先进后出/先进先出的特性我们早已了然于心, 在学习数据结构时,我们利用c语言实现栈与队列,从结构体写起,利用数组或指针表示他们的数据成员,之后再一个个实现他们…

Mycat与ShardingSphere如何选择(未完待续)

区别 MycatSharding-JDBCSharding-ProxySharding-Sidecar官方网站官方网站官方网站官方网站官方网站源码地址GitHubGitHubGitHubGitHub官方文档Mycat 权威指南官方文档官方文档官方文档开发语言JavaJavaJavaJava开源协议GPL-2.0/GPL-3.0Apache-2.0Apache-2.0Apache-2.0数据库M…

漏刻有时数据可视化Echarts组件开发(30):自定义方向的数据流向动画

let points = [{name: 市城市管理局,desc: {type: 1,},},{name: 科大讯飞,desc: {type: 2,},},{name: 市水利局,desc: {type: 1,},},{name: 市政法委,desc: {type: 1,},},{name: 市自然资源和规划局,desc: {type: 1,},},{name: 市生态环境局,desc: {type: 1,},},{name: 市大数据…

Linux:centos9的本地yum仓库配置

其实9和7的配置方法是差不多一样的,只不过你使用7的本地yum仓库里面直接挂载就可以直接把仓库位置指向挂载点 具体可以看我往期文章,但是先看完我下面的描述再去看我链接的文章才能看懂如何配置centos9的yum仓库 Linux:YUM仓库服务_鲍海超-…

监督学习和非监督学习, 半监督学习和增强学习

监督学习 给机器的训练数据拥有“标记”或者“答案”, 也就是又有x、又有y 监督的意思是说我们针对给机器的数据进行了正确答案的划分, 这个正确的答案的本身就被称为监督的信息 比如: 生活中很多学习的过程都是监督学习的过程,…

pom.xml中解决“vulnerable dependency maven:org.yaml:snakeyaml:1.33“警告问题

问题 当我们引入依赖的时候,pom文件会有这样的提示,其大概的意思就是 maven:org.yaml:snakeyaml:1.30"表示通过Maven引入了一个潜在的安全漏洞依赖项"org.yaml:snakeyaml:1.30" 解决办法 其实我们就是要更改这个依赖的版本&#xff0c…