cutelyst  3.9.1
A C++ Web Framework built on top of Qt, using the simple approach of Catalyst (Perl) framework.
validatoralphadash.cpp
1 /*
2  * SPDX-FileCopyrightText: (C) 2017-2022 Matthias Fehring <mf@huessenbergnetz.de>
3  * SPDX-License-Identifier: BSD-3-Clause
4  */
5 
6 #include "validatoralphadash_p.h"
7 
8 #include <QRegularExpression>
9 
10 using namespace Cutelyst;
11 
13  bool asciiOnly,
14  const ValidatorMessages &messages,
15  const QString &defValKey)
16  : ValidatorRule(*new ValidatorAlphaDashPrivate(field, asciiOnly, messages, defValKey))
17 {
18 }
19 
21 {
22 }
23 
25 {
26  ValidatorReturnType result;
27 
28  Q_D(const ValidatorAlphaDash);
29 
30  const QString v = value(params);
31  if (!v.isEmpty()) {
32  if (Q_LIKELY(ValidatorAlphaDash::validate(v, d->asciiOnly))) {
33  result.value.setValue(v);
34  } else {
35  qCDebug(C_VALIDATOR,
36  "ValidatorAlphaDash: Validation failed for field %s at %s::%s: %s contains "
37  "characters that are not allowed.",
38  qPrintable(field()),
39  qPrintable(c->controllerName()),
40  qPrintable(c->actionName()),
41  qPrintable(v));
42  result.errorMessage = validationError(c);
43  }
44  } else {
45  defaultValue(c, &result, "ValidatorAlphaDash");
46  }
47 
48  return result;
49 }
50 
51 bool ValidatorAlphaDash::validate(const QString &value, bool asciiOnly)
52 {
53  bool valid = true;
54  if (asciiOnly) {
55  for (const QChar &ch : value) {
56  const ushort &uc = ch.unicode();
57  if (!(((uc > 64) && (uc < 91)) || ((uc > 96) && (uc < 123)) ||
58  ((uc > 47) && (uc < 58)) || (uc == 45) || (uc == 95))) {
59  valid = false;
60  break;
61  }
62  }
63  } else {
64  valid = value.contains(QRegularExpression(QStringLiteral("^[\\pL\\pM\\pN_-]+$")));
65  }
66  return valid;
67 }
68 
70  const QVariant &errorData) const
71 {
72  QString error;
73  Q_UNUSED(errorData)
74  Q_D(const ValidatorAlphaDash);
75  const QString _label = label(c);
76  if (_label.isEmpty()) {
77  if (d->asciiOnly) {
78  error = c->translate(
79  "Cutelyst::ValidatorAlphaDash",
80  "Must only contain alpha-numeric latin characters, dashes and underscores.");
81  } else {
82  error =
83  c->translate("Cutelyst::ValidatorAlphaDash",
84  "Must only contain alpha-numeric characters, dashes and underscores.");
85  }
86  } else {
87  if (d->asciiOnly) {
88  //: %1 will be replaced by the field label
89  error = c->translate("Cutelyst::ValidatorAlphaDash",
90  "The text in the “%1” field must only contain alpha-numeric latin "
91  "characters, dashes and underscores.")
92  .arg(_label);
93  } else {
94  //: %1 will be replaced by the field label
95  error = c->translate("Cutelyst::ValidatorAlphaDash",
96  "The text in the “%1” field must only contain alpha-numeric "
97  "characters, dashes and underscores.")
98  .arg(_label);
99  }
100  }
101  return error;
102 }
QString validationError(Context *c, const QVariant &errorData=QVariant()) const
Returns a descriptive error message if validation failed.
Stores custom error messages and the input field label.
QString genericValidationError(Context *c, const QVariant &errorData=QVariant()) const override
Returns a generic error message.
static bool validate(const QString &value, bool asciiOnly=false)
Returns true if the value only contains alpha-numeric characters, dashes and underscores.
The Cutelyst Context.
Definition: context.h:38
bool isEmpty() const const
QString translate(const char *context, const char *sourceText, const char *disambiguation=nullptr, int n=-1) const
Definition: context.cpp:490
The Cutelyst namespace holds all public Cutelyst API.
Definition: Mainpage.dox:7
Base class for all validator rules.
QString label(Context *c) const
Returns the human readable field label used for generic error messages.
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
void setValue(const T &value)
QString value(const ParamsMultiMap &params) const
Returns the value of the field from the input params.
ValidatorAlphaDash(const QString &field, bool asciiOnly=false, const ValidatorMessages &messages=ValidatorMessages(), const QString &defValKey=QString())
Constructs a new alpha dash validator.
Checks a value for only alpha-numeric content and dashes and underscores.
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QString field() const
Returns the name of the field to validate.
Contains the result of a single input parameter validation.
Definition: validatorrule.h:49
~ValidatorAlphaDash() override
Deconstructs the alpha dash validator.
void defaultValue(Context *c, ValidatorReturnType *result, const char *validatorName) const
I a defValKey has been set in the constructor, this will try to get the default value from the stash ...