0

現在、RegExpの問題の解決策を探しています。私はドキュメントを調べてインターネットを調べましたが、ほとんど誰もRegExpを使用していないようです-少なくとも、探しているものが見つかりません.

私は現在、SANS Institute for password policies に従って、パスワード強度チェッカーに取り組んでいます。( 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);

私はあなたの助けを楽しみにしています。

4

1 に答える 1

2

\問題が見つかった文字をバックスラッシュでエスケープしてみてください

于 2013-08-11T10:41:47.780 に答える