C++Qt RegExp与@、|或^等特殊字符不匹配

C++ Qt RegExp does not match special characters like @ or | or ^

本文关键字:特殊字符 不匹配 RegExp C++Qt      更新时间:2023-10-16

我目前正在寻找RegExp问题的解决方案。我浏览了文档和互联网,但似乎几乎没有人使用RegExp——至少,我找不到我要找的东西。

根据SANS密码策略研究所的说法,我目前正在进行密码强度检查。(http://www.sans.org/security-resources/policies/Password_Policy.pdf)

它说一个强密码包含:

"特殊"字符(例如@#$%^&*()_+|~-=`{}[]:";'<>/等)

所以我想把它应用到我的Qt项目中。相关代码为:

bool specialChars = contains("[@|#|$|%|^|&|*|(|)|_|+|||~|-|=||`|{|}|[|]|:|"|;|'|<|>|/]", password);

而包含的是:

/**
 * @brief PasswordStrenghChecker::contains
 * @param needle
 * @param hay
 * @return
 */
bool PasswordStrengthChecker::contains(QString needle, QString hay)
{
    QRegExp check(needle);
    for(int i = 0; i < hay.length(); i++)
    {
        if ( check.exactMatch(hay.at(i)) )
        {
            return true ;
        }
    }
    return false;
}

当我检查它显示的结果时,@和任何其他字符都不匹配。这里发生了什么事?正则表达式适用于任何其他条件,例如:

bool digits = contains("\d", password);
bool lowerCase = contains("[a-z]", password);
bool upperCase = contains("[A-Z]", password);

我期待着你的帮助。

尝试使用反斜杠查找您发现问题的字符

相关文章: