QLineEdit IP 部分验证

QLineEdit IP partial validation

在我的项目中,我想通过 IP 输入过滤一些数据。

我也想允许通过部分 IP 输入进行过滤 例如:192.168.

我找到了如何设置完整的 IP 验证。

  QString oIpRange;
    QRegExpValidator *poIpValidator;

    // Client IP validation mask
    oIpRange =
            "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
    QRegExp oIpRegex ("^" + oIpRange
                     + "\." + oIpRange
                     + "\." + oIpRange
                     + "\." + oIpRange + "$");
    poIpValidator =
            new QRegExpValidator(oIpRegex,
                                 poQtLineEdit);

    // Client IP set validator
    poQtLineEdit->setValidator( poIpValidator );

我将 QLineEdit "returnPressed" 信号连接到我的过滤函数。

问题是 "returnPressed" 信号只在我输入完整的 IP 时发出,而不是部分 IP。

有什么解决该问题的建议吗?

谢谢

您可以使用 QRegExpValidator 来做到这一点。

// #include <QRegExpValidator>
QString oIpRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
QRegExp oIpRegex ("^" + oIpRange
              + "\." + oIpRange
              + "\." + oIpRange
              + "\." + oIpRange + "$");
ed->setValidator(new QRegExpValidator(oIpRegex));

对于部分验证:

oIpRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
QRegExp oIpRegex ("^" + oIpRange
                 + "\." + oIpRange
                 + "(\." + oIpRange + ")?"
                 + "(\." + oIpRange + ")?$");

感谢您的回答我对正则表达式做了一个小修正

QString oIpRange = "(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
QRegExp oIpRegex ("^" + oIpRange
                         + "(\." + oIpRange + ")?"
                         + "(\." + oIpRange + ")?"
                         + "(\." + oIpRange + ")?$");