首页 > 其他分享 >笔记 | 正则表达与QLineEdit

笔记 | 正则表达与QLineEdit

时间:2023-09-21 14:06:33浏览次数:26  
标签:匹配 示例 正则表达式 笔记 正则 QRegExpValidator QLineEdit lineEdit

正则表达式(Regular Expression),简称正则或正则式,是一种用于描述字符串模式的强大工具。它是一个由字符和操作符组成的字符串,用于匹配和识别文本中的模式。正则表达式广泛用于文本搜索、文本替换、数据验证等领域。

以下是一些常见的正则表达式元字符和操作符:

  • .:匹配任意单个字符。
  • *:匹配前一个元素零次或多次。
  • +:匹配前一个元素一次或多次。
  • ?:匹配前一个元素零次或一次。
  • ^:匹配字符串的开始。
  • $:匹配字符串的结束。
  • []:匹配括号内的任意一个字符。
  • |:表示或的关系,匹配两者之一。
  • ():用于分组,可以改变操作符的优先级。

步骤1:创建 QRegExpValidator 对象

首先,我们需要创建一个 QRegExpValidator 对象,并将一个合适的正则表达式传递给它。例如,要验证 IP 地址格式,可以使用如下正则表达式:

QRegExp ipRegExp("^((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]?)$");
QRegExpValidator *ipValidator = new QRegExpValidator(ipRegExp, this);

步骤2:将验证器应用于 QLineEdit

接下来,我们将创建一个 QLineEdit 控件,然后将 QRegExpValidator 设置为其验证器:

QLineEdit *lineEdit = new QLineEdit(this);
lineEdit->setValidator(ipValidator);

现在,这个 QLineEdit 控件将仅接受符合 IP 地址格式的输入。

我们发现,此时QLineEdit似乎没有被限制,接下来,我们可以利用占位符让它生效:

lineEdit->setInputMask("000.000.000.000; ");

完整示例

以下是一个完整的示例,演示如何在 Qt 中使用 QRegExpValidator 来验证 IP 地址的输入:

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建正则表达式
    QRegExp ipRegExp("^((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]?)$");
    QRegExpValidator *ipValidator = new QRegExpValidator(ipRegExp);

    // 创建 QLineEdit 控件
    QLineEdit lineEdit;
    lineEdit.setValidator(ipValidator);
    lineEdit->setInputMask("000.000.000.000; ");
    
    // 创建窗口
    QWidget window;
    QVBoxLayout layout(&window);
    layout.addWidget(&lineEdit);
    window.setLayout(&layout);

    window.show();

    return app.exec();
}

运行这个示例,您会看到一个只允许输入合法 IP 地址的 QLineEdit 控件。


仅允许输入数字

QRegExp digitRegExp("^[0-9]*$");
QRegExpValidator *digitValidator = new QRegExpValidator(digitRegExp);
lineEdit.setValidator(digitValidator);
lineEdit.setPlaceholderText("Enter digits only");

这个示例使用正则表达式 ^[0-9]*$ 来匹配仅包含数字的字符串。

仅允许输入字母

QRegExp letterRegExp("^[a-zA-Z]*$");
QRegExpValidator *letterValidator = new QRegExpValidator(letterRegExp);
lineEdit.setValidator(letterValidator);
lineEdit.setPlaceholderText("Enter letters only");

这个示例使用正则表达式 ^[a-zA-Z]*$ 来匹配仅包含字母的字符串。

仅允许输入字母和数字

QRegExp alphaNumRegExp("^[a-zA-Z0-9]*$");
QRegExpValidator *alphaNumValidator = new QRegExpValidator(alphaNumRegExp);
lineEdit.setValidator(alphaNumValidator);
lineEdit.setPlaceholderText("Enter letters and digits only");

这个示例使用正则表达式 ^[a-zA-Z0-9]*$ 来匹配包含字母和数字的字符串。

仅允许输入特定范围内的数字

QRegExp rangeRegExp("^[1-9][0-9]{0,2}$"); // 匹配1到999之间的数字
QRegExpValidator *rangeValidator = new QRegExpValidator(rangeRegExp);
lineEdit.setValidator(rangeValidator);
lineEdit.setPlaceholderText("Enter a number between 1 and 999");

这个示例使用正则表达式 ^[1-9][0-9]{0,2}$ 来匹配范围在 1 到 999 之间的数字。


标签:匹配,示例,正则表达式,笔记,正则,QRegExpValidator,QLineEdit,lineEdit
From: https://blog.51cto.com/u_16215707/7553222

相关文章

  • 今日学习笔记2023年9月20日
    1#我的第一条代码2print('helloworld')#这是一条注释3print('这是我的第一条编程命令')4name='egon'#定义变量5print(name)#引用变量6age=187print(age)89x=1010y=x11z=x1213delx#解除X与10的绑定关系14#print(y)......
  • 使用QLoRA对Llama 2进行微调的详细笔记
    使用QLoRA对Llama2进行微调是我们常用的一个方法,但是在微调时会遇到各种各样的问题,所以在本文中,将尝试以详细注释的方式给出一些常见问题的答案。这些问题是特定于代码的,大多数注释都是针对所涉及的开源库以及所使用的方法和类的问题。 https://avoid.overfit.cn/post/903a50......
  • Oracle正则表达式函数
    1、正则表达式中的元字符元字符意思例子\说明要匹配的字符是一个特殊字符、常量或者后者引用。(后引用重复上一次的匹配)\n匹配换行符\\匹配\\(匹配(\)匹配)^匹配字符串的开头位置如果A是字符串的第一个字符,^A匹配A$匹配字符串的末尾位置如果B是字符......
  • 非全日志考研笔记
    前言因为自己最近突然有想考研的念头了,于是开始调研考研相关事宜。想了很久考全日制还是非全日制,最终还是打算选择非全日制。考虑的点主要是:1. 自己本科毕业,目前在互联网大厂做iOS开发工程师,已经是一份比较好的工作了2.自己考研的初衷,也不是为了在互联网找到一份更好的工......
  • RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo
    前言  目标开发任务还有个功能,就是播放rtsp摄像头,当然为了更好的坐这个个,我们必须支持rtsp播放失败之后重新尝试,比如5s重新尝试打开一次,从而保障联网后重新打开,然后达成这个功能。 Demo   补充  得益于方案上的buildroot已经移植了ffmpeg4.1.3。  ......
  • C语言基础语法学习笔记(一)
    前言C语言是大学时期入门编程的第一门编程语言,遗憾的是当时没好好学,这么多年过去了也没有真正的学习和使用过这门优秀的编程语言,现如今正好有时间就打算从头开始好好学一下。学习的参考资料主要是《C语言程序设计》这本书以及benny老师的C语言精讲视频课。快速入门快速入门部分......
  • Nginx第二天学习笔记
    在继续深入Nginx的学习之后,我对这个强大的Web服务器有了更深入的理解。以下是我对第二天学习的总结。一、Nginx的负载均衡Nginx的负载均衡功能是其核心特性之一,它可以轻松处理高并发的请求,使得Web应用能够应付大规模的访问。Nginx通过upstream模块来实现负载均衡,可以配置多个后端服......
  • (笔记)机器人坐标系用法和算法原理
     机器人坐标系 一、基坐标系机器人都有一个不会变的坐标系,叫基坐标系或世界坐标系(每家叫法不同,原理一样)。基坐标系是怎么来的呢? 拿6轴机器人举例: 第一轴的旋转轴 一般都会定义机器人第一轴的旋转轴为基坐标系Z轴,旋转中心即是坐标系原点,X和Y的方向是的电机零点......
  • openGauss学习笔记-75 openGauss 数据库管理-创建和管理序列
    openGauss学习笔记-75openGauss数据库管理-创建和管理序列75.1背景信息序列Sequence是用来产生唯一整数的数据库对象。序列的值是按照一定规则自增的整数。因为自增所以不重复,因此说Sequence具有唯一标识性。这也是Sequence常被用作主键的原因。通过序列使某字段成为唯一标识......
  • 算法学习笔记(29):分块
    分块这是一种基于根号的算法,核心为大块标记,散块暴力,做到复杂度的平衡。可能第一个想到于此相关的就是莫队吧,这是利用分块优化暴力的方法。目录分块RmqProblem/mex[国家集训队]排队-洛谷[TJOI2009]开关-洛谷[Violet]蒲公英-洛谷小小总结RmqProblem/mex这本不......