1

パスワード強度テストのために、次の正規表現を使用して 1 つ以上の特殊文字を照合しています。

if (password.match(/\W+/)) points++;

これは、特殊文字としてのアンダースコア '_' と一致しないようです。これはなぜですか、どうすれば修正できますか?

4

4 に答える 4

4

\Wは と同じで、 、[^\w]\w含まれa-zA-Z0-9_ているためです。

それを修正するには、_文字を個別に追加するだけです:

if (password.match(/[\W_]+/)) points++;
于 2013-01-08T16:12:35.663 に答える
2

\W(大文字) は を意味するnot \wため、単語の文字以外はすべて。

単語の文字 ( \w) には、文字、数字、アンダースコアが含まれます。

おそらく、/[^a-z0-9]+/i非文字に一致させるために使用する必要があります。

于 2013-01-08T16:13:04.823 に答える
0

アンダースコアが単語文字として扱われるため、一致は失敗します。のMDN ドキュメントから \W:

単語以外の任意の文字に一致します。[^A-Za-z0-9_] と同等

アンダースコアと をグループ化することで、これを修正できます\W

if (password.match(/[\W_]+/)) points++;

Javascript Regex Testerなどの正規表現ツールは、この種のデバッグに特に役立ちます。

于 2013-01-08T16:16:20.523 に答える
0

あなたは本当にしたくないです\wか?はの\W否定です\w

\wは (文字、数字、およびアンダースコア) に一致するため、\W文字、数字、およびアンダースコアには一致しません。ここを参照してください: http://www.regular-expressions.info/reference.html

于 2013-01-08T16:13:23.193 に答える