【想法/需求】
如图,两个角度的输入限制分别为-20°至80度、-165°至165°,小数点后最多允许两位小数。
两个控件名分别为AngleGDC与AngleFWC。
【实现】
//正则表达式//声明QRegExp AngleGDC_Limited;//设置表达式AngleGDC_Limited.setPattern("^([1-7]?[0-9](\\.[0-9]{1,2})?|-[0-1]?[0-9](\\.[0-9]{1,2})?|80|0|-20)$");ui->AngleGDC->setValidator(new QRegExpValidator(AngleGDC_Limited,this));QRegExp AngleFWC_Limited;AngleFWC_Limited.setPattern("^(1?[0-6]?[0-4](\\.[0-9]{1,2})?|-1?[0-6]?[0-4](\\.[0-9]{1,2})?|165|0|-165)$");ui->AngleFWC->setValidator(new QRegExpValidator(AngleFWC_Limited,this));
控件一AngleGDC:^([1-7]?[0-9](\.[0-9]{1,2})?|-[0-1]?[0-9](\.[0-9]{1,2})?|80|0|-20)$
可视化图1:
控件二AngleFWC:^(1?[0-6]?[0-4](\.[0-9]{1,2})?|-1?[0-6]?[0-4](\.[0-9]{1,2})?|165|0|-165)$
可视化图2:
推荐个好用的正则表达式可视化工具👉菜鸟工具——正则表达式
【拆分】(图2举例)
^为表达式开始,$为结束。?表示前一个条件可忽略,例如1?就是有没有1都行,但如果有数字只能为1。[0-6]表示0至6中的任意一个数字,等同于[0-6]{1},同样?表示此条件可忽略,但如果有数字则必须在规则范围内。\.表示匹配小数点,不能直接用 ".",单独一个"."表示匹配除换行符外的任意一字符。()表示子表达式,就是可视化图中的虚线框。{1,2}表示重复次数,{m,n},{}前面的条件至少匹配m次,至多匹配n次。{m}表示必须m次,{m,}至表示至少m次,但不设置上限。(\.[0-9]{1,2})的含义,则是先匹配个小数点,小数点后跟着的只能是[0-9]中数字的其中一个,该条件至少匹配1次,最多匹配2次。(这就实现了小数点后最多输入两位的限制条件。)[0-9]可以写成\d ,\d表示任意一个0-9中的数字。|表示或,可以理解为条件判定中的||,可视化图则表示另起一条新的并行黑线。165,0,-165边界值,单独判断,后面不能跟小数。注意:\ 符号在QT中要转为 \\ 符号,否则无法识别。(程序会标黄,但不会报错)正则表达式的特殊符号还有许多,文中只举例目前用上的,需更多规则请自行查阅。
表格来源——百度百科
【宕机记录】
[0-9]中的"-"写成了","{m,n}中的","写成了"-"\在QT中没改成\\写出[1-165],直觉认为这样可以直接设置范围,忘了它只能表示一位数字!!!😂如果发现无法输入内容,找错或者重写,最好对着可视化图写,毕竟一大串符号堆一起看着都晕。
【总结】
边界值/特殊值单独判定,正负区间分开判定,其中个位数、十位数、百位数、浮点数都要判定。
如果觉得《【QT Creator学习记录】(四)限制输入输出与正则表达式》对你有帮助,请点赞、收藏,并留下你的观点哦!