QT——入门之正则表达式

       在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

猜你喜欢

转载自blog.csdn.net/l1206715877/article/details/106178413