Qt通过正则表达式筛选出字符串中的手机号

需求

用户需要聊天记录中含有11位的手机号码进行提醒的功能,所以需要在收到聊天消息后匹配查看是否存在手机号。如果找到然后提醒。

分析

主要的需求可以拆分为两点:

  1. 筛选出字符串里面的数字字符。
  2. 通过正则匹配数字字符是否是11位手机号码。
    一开始没有进行筛选数字字符串的动作,而仅仅通过正则表达式查找11位手机号。发现像嘻嘻138830978901333五 这样超过11位的数字字符也能被匹配后。
    后面先筛选数字字符串,然后再去正则匹配。

代码实现

一、筛选字符串里面的数字字符

在Qt Assistant中查找QRegExp里面有一个demo可以通过正则表达式筛选字符串中的数字字符,通过一个循环保存到QStringList里面。

cpp 复制代码
 QRegExp rx("(\\d+)");
 QString str = "Offsets: 12 14 99 231 7";
 QStringList list;
 int pos = 0;

 while ((pos = rx.indexIn(str, pos)) != -1) {
     list << rx.cap(1);
     pos += rx.matchedLength();
 }
 // list: ["12", "14", "99", "231", "7"] 

二、通过正则匹配是否是11位手机号

通过查看手机号的号段和对应的规则,写了如下的正则表达式:

复制代码
^1([358][0-9]|4[579]|6[2567]|7[0135678]|9[0123589])[0-9]{8}$

参考如下两篇文章:

  1. Qt判断手机号码:匹配手机号码的正则
  2. 最新最全的手机号验证正则表达式
    后面封装函数如下:
cpp 复制代码
bool HasPhoneNum(const QString& strNum)
{
    QRegExp rx("\\d+");
    QRegExp regx("^1([358][0-9]|4[579]|6[2567]|7[0135678]|9[0123589])[0-9]{8}$");
    QRegExpValidator regs(regx,0);
    QString d;
    int pos = 0;
    int nPos = 0;

    while ((pos = rx.indexIn(strNum, pos)) != -1) {
        QString strPhone = rx.cap(0);
        QValidator::State res = regs.validate(strPhone, nPos);
        if (QValidator::Acceptable == res) {
            return true;
        }
        pos += rx.matchedLength();
    }

    return false;
}
相关推荐
染指11106 小时前
26.RAG进阶(Advanced RAG)-假设性问题索引
人工智能·windows·agent·rag·advanced rag
森G8 小时前
61、信号与槽机制在 TCP 编程中的应用---------网络编程
网络·c++·qt·网络协议·tcp/ip
就改了9 小时前
Windows 环境 SkyWalking 完整实操教程
windows·微服务·skywalking
古德new10 小时前
鸿蒙PC迁移:Photoflare Qt 图片编辑器鸿蒙PC适配全记录
qt·编辑器·harmonyos
小森林之主11 小时前
Python re 模块速查:从实战对比中掌握正则表达式
python·正则表达式·性能测试·re模块·编程实战
郭wes代码12 小时前
Win10 拒绝访问、长期关机自动维护与声音图标灰色故障解决记录
windows·python·开源
古德new14 小时前
鸿蒙PC迁移:Anki Qt 记忆卡片工具鸿蒙PC适配全记录
qt·华为·harmonyos
2601_9618752414 小时前
花生十三公考课程|网课|视频
数据库·windows·git·svn·eclipse·github
bkspiderx15 小时前
Windows DLL核心技术:深入理解__declspec(dllexport)与__declspec(dllimport)
windows·stm32·单片机·dllimport·dllexport·windows dll·__declspec
铁打的阿秀15 小时前
SQL server2025 Express安装及管理工具安装使用教程(Windows)
windows·sqlserver·express