- 输入整型限制
ui->lineEdit->setValidator( new QIntValidator(0, 100) );
- 输入浮点数类型限制
ui->lineEdit->setValidator( new QDoubleValidator(-100, 100, 2) );
因为浮点数的储存方式不同所以以上代码只能实现小数位的限制,却不能限制整数位。
- 正则表达式限制
使用正则表达式首先需要了解一些符号的作用,比如\d用来匹配数字,下面结合一些例子说明。
例子 |
解释 |
[abc] |
方括号中间是几个字母,表示a,b,c这三个单独的字符 |
[^abc] |
除了a,b,c以外的字符 |
[a-z] |
横杠表示范围,匹配a到z之间(包括a和z)的所有单个字符 |
[a-zA-Z] |
a到z、A到Z的所有单个字符 |
^ |
在一行最前 |
$ |
在一行的最后 |
\s |
匹配任意空白字符 |
\S |
匹配任意非空白的字符 |
\d |
任意数字 |
\D |
任意非数字 |
\w |
任意单字字符(字母、数字或下划线) |
\W |
任意非单字字符 |
(a|b) |
a或b |
a? |
?代表0个或1个 |
a* |
*代表0个或1个或多个 |
a+ |
+代表1个或多个 |
a{n} |
n个a |
a{n,} |
n个或大于n个a |
a{n,m} |
a的个数在n和m之间(包括n和m) |
例1、输入只能从0-99999,整数
QRegExp regExp("0|[1-9]\\d{0,4}");
ui->lineEdit->setValidator( new QRegExpValidator(regExp, this) );
例2、输入-180-180的浮点型
QRegExp double_rx( "(^-?180$)|(^-?1[0-7]\\d$)|(^-?[1-9]\\d$)|(^-?[1-9]$)|^0$" );
ui->lineEdit->setValidator( new QRegExpValidator(double_rx,this) );
例3、检查输入是否符合格式
如果输入与正则表达式相匹配,则返回Acceptable;如果部分匹配,则返回Intermediate(部分匹配,意思是如果给它增加额外的字符则能够匹配正则表达式);如果不匹配则返回Invalid。
enum QValidator::State ,这个枚举类型说明了被验证的字符串是哪种类型。
QValidator::Invalid:值为0,表示字符串完全不匹配;
QValidator::Intermediate:值为1,表示部分匹配;
QValidator::Acceptable:值为2,表示完全匹配。
// integers 1 to 9999
QRegExp rx("[1-9]\\d{0,3}");
// the validator treats the regexp as "^[1-9]\\d{0,3}$"
QRegExpValidator v(rx, 0);
QString s;
int pos = 0;
s = "0"; v.validate(s, pos); // returns Invalid
s = "12345"; v.validate(s, pos); // returns Invalid
s = "1"; v.validate(s, pos); // returns Acceptable
rx.setPattern("\\S+"); // one or more non-whitespace characters
v.setRegExp(rx);
s = "myfile.txt"; v.validate(s, pos); // Returns Acceptable
s = "my file.txt"; v.validate(s, pos); // Returns Invalid
// A, B or C followed by exactly five digits followed by W, X, Y or Z
rx.setPattern("[A-C]\\d{5}[W-Z]");
v.setRegExp(rx);
s = "a12345Z"; v.validate(s, pos); // Returns Invalid
s = "A12345Z"; v.validate(s, pos); // Returns Acceptable
s = "B12"; v.validate(s, pos); // Returns Intermediate
// match most 'readme' files
rx.setPattern("read\\S?me(\.(txt|asc|1st))?");
rx.setCaseSensitive(false);
v.setRegExp(rx);
s = "readme"; v.validate(s, pos); // Returns Acceptable
s = "README.1ST"; v.validate(s, pos); // Returns Acceptable
s = "read me.txt"; v.validate(s, pos); // Returns Invalid
s = "readm"; v.validate(s, pos); // Returns Intermediate
常用的正则表达式:
非负整数:"^\d+$"
正整数:"^[0-9]*[1-9][0-9]*$"
非正整数(负整数 + 0):"^((-\d+)|(0+))$"
负整数:"^-[0-9]*[1-9][0-9]*$"
整数:"^-?\d+$"
非负浮点数(正浮点数 + 0):"^\d+(\.\d+)?$"
正浮点数:"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"
非正浮点数(负浮点数 + 0):"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"
负浮点数:"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"
浮点数:"^(-?\d+)(\.\d+)?$"
由26个英文字母组成的字符串 "^[A-Za-z]+$"
由26个英文字母的大写组成的字符串:"^[A-Z]+$"
由26个英文字母的小写组成的字符串:"^[a-z]+$"
由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"
由数字、26个英文字母或者下划线组成的字符串:"^\w+$"
email地址:"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"
年-月-日:"^(\d{2}|\d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$"
月/日/年:"^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|\d{4})$"
电话号:"(\d+-)?(\d{4}-?\d{7}|\d{3}-?\d{8}|^\d{7,8})(-\d+)?"
IP地址:
"^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]).(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]).(\d{1,2}|1\d\d|2[0-4]d|25[0-5]).(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$"
[说明]从Qt5.1开始的版本中出现类QRegularExpressionValidator用法与QRegExpValidator 类似。
来源:CSDN
作者:码尚世界
链接:https://blog.csdn.net/Jzryhp/article/details/104805170