【问题标题】:Qt QLineEdit Input ValidationQt QLineEdit 输入验证
【发布时间】:2017-01-05 06:36:03
【问题描述】:

如何在QLineEdit 上设置输入验证器,以便将其限制为有效的 IP 地址?即 x.x.x.x 其中 x 必须介于 0 和 255 之间。并且 x 不能为空

【问题讨论】:

标签: qt validation qregexp input-mask qregularexpression


【解决方案1】:

答案是here

简而言之:您必须使用 IP4 地址的适当正则表达式设置QRegExpValidator

【讨论】:

    【解决方案2】:

    您正在寻找 QRegExpQValidator,以使用此表达式验证 IPv4:

    \b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\b
    

    例子:

    QRegExp ipREX("\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\.(25[0-5]|2[0-4][0-‌​9]|[01]?[0-9][0-9]?)‌​\b");
    ipREX.setCaseSensitivity(Qt::CaseInsensitive);
    ipREX.setPatternSyntax(QRegExp::RegExp);
    

    现在,将其用作文本行编辑的验证器:

    QRegExpValidator regValidator( rx, 0 );
    ui->lineEdit->setValidator( &regValidator );
    

    现在,只需阅读您的输入,验证器就会对其进行验证 =)。如果您想手动操作,请尝试以下操作:

    ui->lineEdit->setText( "000.000.000.000" );
    const QString input = ui->lineEdit->text();
    // To check if the text is valid:
    qDebug() << "IP validation: " << myREX.exactMatch(input);
    

    还有另一种使用 Qt 类的方法,QHostAddressQAbstractSocket

    QHostAddress address(input);
    if (QAbstractSocket::IPv4Protocol == address.protocol())
    {
       qDebug("Valid IPv4 address.");
    }
    else if (QAbstractSocket::IPv6Protocol == address.protocol())
    {
       qDebug("Valid IPv6 address.");
    }
    else
    {
       qDebug("Unknown or invalid address.");
    }
    

    【讨论】:

    • 取值也大于 255。我们可以输入 133.133。而不是 4 个部分。它能够占用少于 4 部分的 IP 地址。请建议我们如何验证 IP 地址必须包含 4 个部分,范围为 0-255
    • 查看我最近的更改。这是迄今为止我发现的最好的: \b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\ .(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0 -4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01] ?[0-9][0-9]?)\b
    猜你喜欢
    • 2015-11-18
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多