diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/common')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.cpp | 95 | ||||
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.h | 35 |
2 files changed, 130 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.cpp b/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.cpp new file mode 100644 index 0000000..35c8b75 --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.cpp @@ -0,0 +1,95 @@ +#include "ipvalidator.h" +#include <QDebug> + +QString IpValidator::reStr = "^%1(\\d%2)%1\\.%1(\\d%2)%1\\.%1(\\d%2)%1\\.%1(\\d%2)%1$"; + +IpValidator::IpValidator(QObject* parent) : + QValidator(parent) +{ +} + +IpValidator::~IpValidator() +{ +} + +QValidator::State IpValidator::validate(QString& input, int&) const +{ + QString regexp = getPattern(acceptWhiteSpaces, false, whitespaceCharacter); + QRegularExpression re(regexp); + QRegularExpressionMatch match = re.match(input); + if (!match.hasMatch()) + return Invalid; + + QString part; + int value; + bool ok; + for (int i = 1; i <= 4; i++) + { + part = match.captured(i); + if (part.isEmpty()) + { + if (acceptEmptyParts) + continue; + else + return Invalid; + } + + value = part.toInt(&ok); + if (!ok) + return Invalid; + + if (value > 255 || value < 0) + return Invalid; + } + + return Acceptable; +} + +bool IpValidator::getAcceptWhiteSpaces() const +{ + return acceptWhiteSpaces; +} + +void IpValidator::setAcceptWhiteSpaces(bool value) +{ + acceptWhiteSpaces = value; +} +bool IpValidator::getAcceptEmptyParts() const +{ + return acceptEmptyParts; +} + +void IpValidator::setAcceptEmptyParts(bool value) +{ + acceptEmptyParts = value; +} +QChar IpValidator::getWhitespaceCharacter() const +{ + return whitespaceCharacter; +} + +void IpValidator::setWhitespaceCharacter(const QChar& value) +{ + whitespaceCharacter = value; +} + +bool IpValidator::check(const QString& input, bool acceptWhiteSpaces) +{ + QString regexp = getPattern(acceptWhiteSpaces, true, ' '); + QRegularExpression re(regexp); + return re.match(input).hasMatch(); +} + +QString IpValidator::getPattern(bool acceptWhiteSpaces, bool requireFull, QChar whitespaceCharacter) +{ + QString countChar = requireFull ? "+" : "*"; + if (acceptWhiteSpaces) + { + if (whitespaceCharacter == ' ') + return reStr.arg("\\s*", countChar); + else + return reStr.arg(whitespaceCharacter + QString("*"), countChar); + } + else + return reStr.arg("", countChar); +} diff --git a/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.h b/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.h new file mode 100644 index 0000000..1c9ca4d --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/common/ipvalidator.h @@ -0,0 +1,35 @@ +#ifndef IPVALIDATOR_H +#define IPVALIDATOR_H + +#include <QValidator> + +class IpValidator : public QValidator +{ + public: + IpValidator(QObject* parent = 0); + ~IpValidator(); + + State validate(QString& input, int&) const; + + bool getAcceptWhiteSpaces() const; + void setAcceptWhiteSpaces(bool value); + + bool getAcceptEmptyParts() const; + void setAcceptEmptyParts(bool value); + + QChar getWhitespaceCharacter() const; + void setWhitespaceCharacter(const QChar& value); + + static bool check(const QString& input, bool acceptWhiteSpaces = false); + + private: + static QString getPattern(bool acceptWhiteSpaces, bool requireFull, QChar whitespaceCharacter); + + bool acceptWhiteSpaces = false; + bool acceptEmptyParts = false; + QChar whitespaceCharacter = ' '; + + static QString reStr; +}; + +#endif // IPVALIDATOR_H |
