Rishabh Bansal
Rishabh Bansal

Reputation: 61

Qt QLineEdit Input Validation

How would one set an input validator on a QLineEdit such that it restricts it to a valid IP address? i.e. x.x.x.x where x must be between 0 and 255.and x can not be empty

Upvotes: 4

Views: 12444

Answers (2)

mohabouje
mohabouje

Reputation: 4050

You are looking for QRegExp and QValidator, to validate an IPv4 use this expresion:

\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

Example:

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);

Now, use it as validator of your text lineedit:

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

Now, just read your input and the validator will validate it =). If you want to do it manually, try something like this:

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);

There is another way to made it using Qt classes, QHostAddress and QAbstractSocket:

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.");
}

Upvotes: 5

Bernhard Heinrich
Bernhard Heinrich

Reputation: 120

The answer is here

In short: You have to set QRegExpValidator with the appropriate Regular Expression for IP4 adresses.

Upvotes: 1

Related Questions