PyQt5 输入验证器-正则方式

本文最后更新于:2022年12月3日 下午

最近在写网络调试助手时想要找到能对IPv4地址进行输入验证的验证器,查找资料,找到了QRegExpValidator类

QRegExpValidator类

创建方法

1
2
QRegExpValidator(parent: QObject = None)
QRegExpValidator(QRegExp, parent: QObject = None)

其中QRegExp为Qt的正则表达式类

使用举例

1
2
3
4
5
6
7
8
9
10
# 可以验证输入IP地址的QLineEdit
class IPValidator(QRegExpValidator):
"""自建的类,继承自QRegExpValidator"""
def validate(self, input: str, pos: int) -> [QValidator.State, str, int]:
input = input.replace('。', '.') # 重写validate方法,使得能够支持中文输入法输入的‘。’
return super().validate(input, pos)

reg_ex = QRegExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)") # 这个正则表达式可以匹配IPv4地址
ip_input_validator = IPValidator(reg_ex, self.__ui.TargetIPLineEdit) # 创建一个验证器实例,绑定父控件
self.__ui.TargetIPLineEdit.setValidator(ip_input_validator) # 为LineEdit设置验证器

QRegExp类

Qt官方文档

元字符匹配规则

字符 匹配项 例子
. 任意单个字符 1.3可匹配123,143,…
^ 字符串首串 ^12可匹配123,不可匹配312
[] 括号内输入的任意字符 [123]可匹配1,2或3
* 任意数量的前导字符 1*2可以为任意数量个1(甚至没有), 后面跟一个2
+ 至少一个前导字符 1+2必须为一个或多个1, 后跟一个2
? 一个前导字符或为空 1?2可以为2或者12

统配模式


PyQt5 输入验证器-正则方式
https://muzing.top/posts/293d0201/
作者
Muzing
发布于
2021年1月21日
更新于
2022年12月3日
许可协议