4

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

2
  • Have you read the docs of QValidator? Start from there. You have basically two options, create your own subclass "IpValidator", or use the regular expression validators. Commented Aug 29, 2016 at 9:35
  • Possible duplicate of How to set Input Mask and QValidator to a QLineEdit at a time in Qt? Commented Aug 29, 2016 at 11:00

2 Answers 2

5

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.");
}
Sign up to request clarification or add additional context in comments.

2 Comments

It is taking the value greater than 255 also. and we can enter 133.133. instead of 4 parts. it is able to take less than 4 parts of ip address. Please suggest how we can validate that ip address must contain 4 parts with range 0-255
See my last changes. Here's the best one I've found so far: \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
1

The answer is here

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.