パスワード強度テストのために、次の正規表現を使用して 1 つ以上の特殊文字を照合しています。
if (password.match(/\W+/)) points++;
これは、特殊文字としてのアンダースコア '_' と一致しないようです。これはなぜですか、どうすれば修正できますか?
パスワード強度テストのために、次の正規表現を使用して 1 つ以上の特殊文字を照合しています。
if (password.match(/\W+/)) points++;
これは、特殊文字としてのアンダースコア '_' と一致しないようです。これはなぜですか、どうすれば修正できますか?
\Wは と同じで、、 、、[^\w]も\w含まれa-zA-Z0-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