Написать валидатор даты на QtCreator с использованием класса QValidator
Пытаюсь реализовать логику валидатора, который проверяет вводимую пользователем строку по шаблону:
шаблон: 1234 г. (до) н.э.
Если строка полностью корректна: return QValidator::Acceptable
Если строка не содержит ошибок, но она неполная: return QValidator::Intermediate
Если строка неверная: return QValidator::Invalid
Использовать регулярные выражения нельзя
Мой код ниже:
ExampleValidator::ExampleValidator(QObject *parent): QValidator(parent){}
ExampleValidator::~ExampleValidator(){}
QValidator::State ExampleValidator::validate( QString &input, int &pos ) const
{
QString inputValue = input.trimmed().toLower();
QStringList inputWords = input.split(" ");
bool isYearValid;
int year = inputWords[0].toInt(&isYearValid);
if (inputValue.isEmpty()) return QValidator::Intermediate;
if (inputValue[0] == '0') return QValidator::Invalid;
if (!isYearValid) return QValidator::Invalid;
if (inputWords.size() < 3) return QValidator::Intermediate;
if (inputWords.size() > 4) return QValidator::Invalid;
if (inputWords[1] == "г.") return QValidator::Acceptable;
if (inputWords[1] != "г.") return QValidator::Invalid;
if (inputWords[2] == "н.э." && inputWords[3].isEmpty()) return QValidator::Invalid;
if (inputWords[2] == "н.э." && !(inputWords[3].isEmpty())) return QValidator::Acceptable;
if (inputWords[2] == "до" && inputWords[3] == "н.э.") return QValidator::Acceptable;
if (inputWords[2] != "до" || inputWords[2] != "н.э.") return QValidator::Invalid;
return QValidator::Acceptable;
}