在QLineEdit中常常需要受到很多约束,这里就可以使用正则表达式
QT的正则表达式
符号 | 功能 |
---|---|
^ | 一行的开头 |
$ | 一行的结尾 |
[a-z] | 输入a-z的单个小写字母 |
[a-zA-Z] | 输入大写或小写的单个字母 |
[abcd] | 只能输入a、b、c、d其中一个 |
\d | 输入[0-9]任意数字 |
\D | 输入非数字的字符 |
\w | 输入任意单字符 |
\W | 输入任意非单字符 |
[0-9] | 和\d的效果一致 |
a|b | 表示a或b |
a? | 表示a可输入1次或0次 |
a* | 表示输入出现0次或者多次 |
a+ | 表示可以输入1次或者多次 |
a{5} | 输入5个a |
a{5,16} | 输入5个至16个a |
a{5,} | 输入5个以上的a |
[\u4e00-\u9fa5] | 匹配中文(中字符也能输入) |
注意:在代码中除了中文的[\u4e00-\u9fa5]这里面的\不用双写,其他的\都要写成\\这样。
不含中文demo
//需要头文件
#include <QRegExpValidator> //正则表达
//建立一个QLineEdit对象 *IPLineEdit;
QLineEdit *IPLineEdit = new QLineEdit(this);
//写一个192.168.0.0 到 192.168.255.255的正则表达式
QString IP = "192\\.168((\\.(2[0-4]\\d|25[0-5]|1\\d{2}|[1-9]?\\d)){2})";
//建立QRegExp 变量rx,把上面写好的正则表达式导入
QRegExp rx(IP);
//建立QRegExpValidator 并构造
QRegExpValidator *pReg = new QRegExpValidator(rx, this);
//将已经建立好的LineEdit对象设置正则表达式
IPLineEdit->setValidator(pReg);
这里我们解读一下上面的正则表达式
先看口号里面的表达式 ((\.(2[0-4]\d|25[0-5]|1\d{2}|[1-9]?\d)){2})我们以 | 为界限分开
- (2[0-4]\d) 范围为:200-249
- 25[0-5] 范围为:250-255
- 1\d{2} 范围为:100-199
- [1-9]?\d 范围为:0-99
因为这些使用|符号连接(表示“或”的关系),所以范围为0-255,所以可以化简成[0-255]
然后我们再往外面一层看(\.[0-255]){2},这个意思就是重复“ . 0到255”两次
注意:这里\.表示输入一个小数点
最后我们再看192\.168(\.[0-255]){2}的意思就是前面的7位我们必须写成192.168后面接上两次.0-255
包含中文demo
如果有你使用的是中文,并且要过滤掉中文字符。那么要做这些处理
//建立一个
QLineEdit *my_lineEdit = new QLineEdit;
//表示匹配一个或者多个中文字符
QRegExp rx("^[\u4e00-\u9fa5]+$");
//导入正则
QValidator *pReg = new QRegExpValidator(regx,this);
my_lineEdit->setValidator(pReg );
//连接槽函数
connect(my_lineEdit,SIGNAL(textChanged(QString)), this, SLOT(slotNameFilter(QString)));
//SearchCondWidget我的类
void SearchCondWidget::slotNameFilter(QString s)
{
s.replace(QString::fromLocal8Bit("【"),"");
s.replace(QString::fromLocal8Bit("】"),"");
s.replace(QString::fromLocal8Bit("?"),"");
s.replace(QString::fromLocal8Bit("!"),"");
s.replace(QString::fromLocal8Bit("·"), "");
s.replace(QString::fromLocal8Bit("¥"),"");
s.replace(QString::fromLocal8Bit("……"), "");
s.replace(QString::fromLocal8Bit("("),"");
s.replace(QString::fromLocal8Bit(")"),"");
s.replace(QString::fromLocal8Bit("——"), "");
s.replace(QString::fromLocal8Bit("、"),"");
s.replace(QString::fromLocal8Bit(":"),"");
s.replace(QString::fromLocal8Bit(";"),"");
s.replace(QString::fromLocal8Bit("“"),""); //引号两边分开过滤
s.replace(QString::fromLocal8Bit("”"), "");
s.replace(QString::fromLocal8Bit("’"),""); //引号两边分开过滤
s.replace(QString::fromLocal8Bit("‘"), "");
s.replace(QString::fromLocal8Bit("《"),"");
s.replace(QString::fromLocal8Bit("》"),"");
s.replace(QString::fromLocal8Bit(","),"");
s.replace(QString::fromLocal8Bit("。"),"");
name_lineEdit->setText(s);
}
包含中文demo转载于:https://blog.csdn.net/lilili1010101010/article/details/84028340