QT 正则表达式无效
背景:写了一个判断IP地址合法的正则表达式,并让它应用在输入框中
代码如下
QRegExp rx_ip("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$"); class QValidator * validatorIP = new QRegExpValidator(rx_ip, this); uiform.lineEdit->setValidator(validatorIP); uiform.lineEdit->setInputMask("000.000.000.000;"); uiform.lineEdit->setText(str_IP);
实际输入时,发现可以输入999.999.999.999,相当于正则表达式无效,只有
uiform.lineEdit->setInputMask("000.000.000.000;");生效
通过分析,可能是正则表达式与setInputMask之间不一致的问题导致的,如正则表达式可以有四位都是1位数的情况等。
因此只能在实现进行二选一,要么用正式表达式要么用setInputMask,第三种方式就是先用setInputMask设置输入格式,然后进行连接时加一个IP有效性的判断,如下:
//正则表达式判断 QRegExp rx_ip("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$"); bool match = rx_ip.exactMatch(uiform.lineEdit->text()); if (!match) { QMessageBox:: critical(NULL, QStringLiteral("错误"), QStringLiteral("请输入正确的IP地址及端口号"),QMessageBox:: Yes , QMessageBox:: Yes) ; }