3

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

4

2 回答 2

4

您正在寻找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);

现在,将其用作文本 lineedit 的验证器:

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.");
}
于 2016-08-29T10:03:02.990 回答
1

答案在 这里

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

于 2016-08-29T09:59:33.007 回答