-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspecialvalidator.cpp
43 lines (30 loc) · 1.27 KB
/
specialvalidator.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "specialvalidator.h"
#include <QRegularExpression>
SpecialValidator::SpecialValidator(QObject *parent)
: QValidator{parent}
{}
QValidator::State SpecialValidator::validate(QString &input, int &pos) const
{
if (input.isEmpty())
return QValidator::Acceptable;
static QRegularExpression expression("^\\d{0,4}$");
QRegularExpressionMatch expressionMatch = expression.match(input);
if (expressionMatch.hasMatch()) {
if (expressionMatch.captured(0).size() != 4)
return QValidator::Intermediate;
return QValidator::Acceptable;
}
static QRegularExpression advancedExpression("^(\\d{4})-(\\d{0,4})$");
QRegularExpressionMatch advancedExpressionMatch = advancedExpression.match(input);
if (advancedExpressionMatch.hasMatch()) {
QString lhs = advancedExpressionMatch.captured(1);
const QString rhs = advancedExpressionMatch.captured(2);
if (rhs.isEmpty())
return QValidator::Intermediate;
if (rhs.size() == 4)
return lhs.toInt() < rhs.toInt() ? QValidator::Acceptable : QValidator::Invalid;
lhs.truncate(rhs.size());
return lhs.toInt() <= rhs.toInt() ? QValidator::Intermediate : QValidator::Invalid;
}
return QValidator::Invalid;
}