2012-02-10 8 views
0

私はこのコードに取り組んでおり、パスワードの強さを検出するために "一致"機能を使用しています。文字列に特殊文字が含まれている場合は、どうすれば検出できますか?特殊文字のJavascriptの一致関数

if(password.match(/[a-z]+/)) score++; 
if(password.match(/[A-Z]+/)) score++; 
if(password.match(/[0-9]+/)) score++; 
+2

文字または数字でないものはすべて、特殊文字に一致します。 – mrtsherman

答えて

0
if(password.match(/[^\w\s]/)) score++; 

これは、英数字でも空白でもないものと一致します。空白も一致する場合は、/[^\w]/を使用してください。

7

あなたは、@の#$%を意味し、ë使用できるなどの特殊な文字場合:!

/[^a-zA-Z ]+/ 

それは-Zまたは-Zまたはスペースのようなものでない場合^を意味します。

そして、あなたは唯一の@ $ & $の使用のようなものを意味する場合:ない単語文字に一致

/\W+/ 

\w一致する単語文字、\Wを!。

+0

+1の説明:-) – Bojangles

3

あなたはそうのように、個別にそれらをホワイトリストに登録する必要があります:

if(password.match(/[`[email protected]#\$%\^&\*\(\)\-=_+\\\[\]{}/\?,\.\<\> ... 

のように。正規表現の制御文字は\でエスケープしなければならないことに注意してください。

/[^A-Za-z0-9]+/よりもエレガントではありませんが、国際化の問題を回避できます(中国語や日本語などの極東言語の文字を自動的にホワイトリストに登録しないなど)。

2

あなたは常に文字クラスを否定することができます

if(password.match(/[^a-z\d]+/i)) { 
    // password contains characters that are *not* 
    // a-z, A-Z or 0-9 
} 

しかし、私は、既製のスクリプトを使用してお勧めしたいです。上記のコードでは、空白を入力してより良いスコアを得ることができます。

1

あなたの正規表現を見ると、英数字の特殊文字以外のすべてを呼び出しています。そうであれば、単純にしてください。

if(password.match(/[\W]/)) { 
    // Contains special character. 
} 

は、とにかくどのようになぜあなたは一つにこれらの3つの正規表現を混在させないでください。

if(password.match(/[\w]+/gi)) { 
    // Do your stuff. 
}