在QT中校验字符串只能由数字、字母、下划线、中划线、空格组成;必须以字母或数字开头,由字母、数字结尾
时间: 2024-10-20 15:10:33 浏览: 14
获取同时含有数字、大写字母、小写字母的随机字符串
在Qt中,要验证字符串满足这个特定规则,你可以使用QRegExp(正则表达式引擎)来进行复杂模式匹配。这里有一个例子:
```cpp
#include <QRegularExpression>
#include <QString>
#include <QValidator>
class CustomValidator : public QValidator {
public:
explicit CustomValidator(QObject *parent = nullptr)
: QValidator(parent), pattern(QStringLiteral("[A-Za-z0-9_]*(\\s?[A-Za-z0-9_])?")) {}
State validate(QString &input, int pos) const override {
if (pos == 0 && !isStartOfAlphaNumeric(input)) {
setInvalid(QStringLiteral("String must start with an alphabet or number"));
return Invalid;
} else if (!pattern.exactMatch(input)) {
setInvalid(QStringLiteral("String contains invalid characters"));
return Invalid;
} else {
setValid();
return Acceptable;
}
}
private:
bool isStartOfAlphaNumeric(const QString &input) const {
auto firstChar = input.at(0);
return QChar::isLetter(firstChar) || QChar::isNumber(firstChar);
}
QRegExp pattern;
};
// 使用方法
CustomValidator validator;
QString userInput = "my-string_123";
if (validator.validate(userInput, 0) == QValidator::Acceptable) {
qDebug() << "The string is valid according to the custom rule.";
} else {
qDebug() << "The string is invalid.";
}
```
这个例子中,我们创建了一个自定义的QValidator子类,并设置了正则表达式模式。该模式允许由数字、字母、下划线、中划线和单个空格组成的字符串,并且首尾必须是非空的字母或数字。
阅读全文