パスワード強度テストのために、次の正規表現を使用して 1 つ以上の特殊文字を照合しています。
if (password.match(/\W+/)) points++;
これは、特殊文字としてのアンダースコア '_' と一致しないようです。これはなぜですか、どうすれば修正できますか?
パスワード強度テストのために、次の正規表現を使用して 1 つ以上の特殊文字を照合しています。
if (password.match(/\W+/)) points++;
これは、特殊文字としてのアンダースコア '_' と一致しないようです。これはなぜですか、どうすれば修正できますか?
\W
は と同じで、、 、、[^\w]
も\w
含まれa-z
A-Z
0-9
_
ているためです。
それを修正するには、_
文字を個別に追加するだけです:
if (password.match(/[\W_]+/)) points++;
\W
(大文字) は を意味するnot \w
ため、単語の文字以外はすべて。
単語の文字 ( \w
) には、文字、数字、アンダースコアが含まれます。
おそらく、/[^a-z0-9]+/i
非文字に一致させるために使用する必要があります。
アンダースコアが単語文字として扱われるため、一致は失敗します。のMDN ドキュメントから \W
:
単語以外の任意の文字に一致します。[^A-Za-z0-9_] と同等
アンダースコアと をグループ化することで、これを修正できます\W
。
if (password.match(/[\W_]+/)) points++;
Javascript Regex Testerなどの正規表現ツールは、この種のデバッグに特に役立ちます。
あなたは本当にしたくないです\w
か?はの\W
否定です\w
。
\w
は (文字、数字、およびアンダースコア) に一致するため、\W
文字、数字、およびアンダースコアには一致しません。ここを参照してください: http://www.regular-expressions.info/reference.html