0

パスワード強度インジケーター用の次の JavaScript コードがあります。

if (password.match(/([!,@,#,$,%])/)
{
    strength += 2
}

したがって、パスワードにこれらの許可された文字 (!、@、#、$、%) のいずれかが含まれている場合、インジケーターの強度に値が追加されます。

私の問題は、パスワードに他の特殊文字が含まれている場合は、パスワードインジケーターの強度も下げたいということです。例: ^,`,~,<,>

混乱を避けるために、基本的に、上記の文字 (!、@、#、$、%) 以外の特殊文字は使用しません。だから私はそれをハードコーディングし、不要なすべての特殊文字を書きました。

私はこれを使ってみました:

if (password.match(/([^,`,~,<,>])/)
{
    strength -= 2
}

しかし、私も含めたくありませんが、if条件にそれらを含めると、正規表現の構文エラーを示すエラーがスローされます"。閉じなければならない文字列を表していることがわかっているので、これを理解しています。それについて何かできることはありますか?前もって感謝します!',"

4

3 に答える 3

2

あなたがしたいことは"、 、'、および,を使用してそれぞれをエスケープすることです\。探している正規表現は次のとおりです。

/([\^\`\~\<\,\>\"\'])/

私は実際にJSVerbalExpressionsライブラリを使用してそれを生成しました。チェックすることを強くお勧めします!上記の正規表現を生成するコードは次のとおりです。

var tester = VerEx()
            .anyOf("^,`'\"~<>");

console.log(tester); // /([\^\`\~\<\,\>\"\'])/
于 2013-08-23T07:02:29.463 に答える
2

個々の文字をコンマで区切る必要はありません。また、唯一の用語を括弧で囲む必要もありません。

これはうまくいくはずです:

/[`^~<>,"']/

カラットに注意してください (は前面ではなく、ブロック^の先頭に配置すると特別な意味を持ちます)[]

またtest()、ブール値の if-contains 結果のみが必要なため、使用する必要があります

/[`^~<>,"']/.test(password)
于 2013-08-23T06:54:19.853 に答える
1

これらの特殊文字をカンマなしで角括弧で囲み、機能するかどうかを確認してください。

ここで試すことができます - http://jsfiddle.net/BCn7h/

例:

if (password.match(/["',]/)
{
    strength -= 2
}
于 2013-08-23T07:00:51.663 に答える