正则表达式(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 之间的数字。