#include <QCoreApplication>
#include <QRegularExpression>
#include <QRegularExpressionValidator>
#include <QDebug>
int main(int argc, char **argv)
{
// We want to validate a URL, the regular expression of which comes from
// https://gist.github.com/dperini/729294
// It is released under the MIT license and is therefore fine for us to use
// protocol identifier
"(?:(?:https?|ftp)://)"
// user:pass authentication
"(?:\\S+(?::\\S*)?@)?"
"(?:"
// IP address exclusion
// private & local networks
"(?!(?:10|127)(?:\\.\\d{1,3}){3})"
"(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})"
"(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})"
// IP address dotted notation octets
// excludes loopback network 0.0.0.0
// excludes reserved space >= 224.0.0.0
// excludes network & broacast addresses
// (first & last IP address of each class)
"(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])"
"(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}"
"(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))"
"|"
// host name
"(?:(?:[a-z\\x{00a1}-\\x{ffff}0-9]+-?)*[a-z\\x{00a1}-\\x{ffff}0-9]+)"
// domain name
"(?:\\.(?:[a-z\\x{00a1}-\\x{ffff}0-9]+-?)*[a-z\\x{00a1}-\\x{ffff}0-9]+)*"
// TLD identifier
"(?:\\.(?:[a-z\\x{00a1}-\\x{ffff}]{2,}))"
")"
// port number
"(?::\\d{2,5})?"
// resource path
"(?:/[^\\s]*)?"
"$";
QRegularExpression re(urlRegExp, QRegularExpression::CaseInsensitiveOption);
qDebug() << re.isValid(); // true
QString testString
("http://uuuuuuuuuuuuuuuuuuuuuuuuu");
QRegularExpressionMatch match = re.match(testString);
qDebug() << match; // QRegularExpressionMatch(Valid, no match)
QRegularExpressionValidator validator(re);
int pos = 0;
qDebug() << validator.validate(testString, pos); // 0 == QValidator::Invalid
// Just for kicks:
qDebug() << url << url.isValid(); // QUrl( "http://uuuuuuuuuuuuuuuuuuuuuuuuu" ) true
return 0;
}
#include <QCoreApplication>
#include <QRegularExpression>
#include <QRegularExpressionValidator>
#include <QDebug>
int main(int argc, char **argv)
{
QCoreApplication application(argc, argv);
// We want to validate a URL, the regular expression of which comes from
// https://gist.github.com/dperini/729294
// It is released under the MIT license and is therefore fine for us to use
const QString urlRegExp = "^"
// protocol identifier
"(?:(?:https?|ftp)://)"
// user:pass authentication
"(?:\\S+(?::\\S*)?@)?"
"(?:"
// IP address exclusion
// private & local networks
"(?!(?:10|127)(?:\\.\\d{1,3}){3})"
"(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})"
"(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})"
// IP address dotted notation octets
// excludes loopback network 0.0.0.0
// excludes reserved space >= 224.0.0.0
// excludes network & broacast addresses
// (first & last IP address of each class)
"(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])"
"(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}"
"(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))"
"|"
// host name
"(?:(?:[a-z\\x{00a1}-\\x{ffff}0-9]+-?)*[a-z\\x{00a1}-\\x{ffff}0-9]+)"
// domain name
"(?:\\.(?:[a-z\\x{00a1}-\\x{ffff}0-9]+-?)*[a-z\\x{00a1}-\\x{ffff}0-9]+)*"
// TLD identifier
"(?:\\.(?:[a-z\\x{00a1}-\\x{ffff}]{2,}))"
")"
// port number
"(?::\\d{2,5})?"
// resource path
"(?:/[^\\s]*)?"
"$";
QRegularExpression re(urlRegExp, QRegularExpression::CaseInsensitiveOption);
qDebug() << re.isValid(); // true
QString testString("http://uuuuuuuuuuuuuuuuuuuuuuuuu");
QRegularExpressionMatch match = re.match(testString);
qDebug() << match; // QRegularExpressionMatch(Valid, no match)
QRegularExpressionValidator validator(re);
int pos = 0;
qDebug() << validator.validate(testString, pos); // 0 == QValidator::Invalid
// Just for kicks:
QUrl url(testString, QUrl::StrictMode);
qDebug() << url << url.isValid(); // QUrl( "http://uuuuuuuuuuuuuuuuuuuuuuuuu" ) true
return 0;
}
To copy to clipboard, switch view to plain text mode
Bookmarks