2011-11-08 7 views
3

私は4つの主要な分類のうちの3つを必要とするパスワードポリシーのパスワードチェッカーを作成しています。私が問題を抱えているのは、特殊文字の一致です。すべての特殊文字のPreg_match、パスワードチェック

は、ここで私はこれまで持っているものです。

private function PasswordRequirements($ComplexityCount) { 
    $Count = 0; 
    if(preg_match("/\d/", $this->PostedData['password']) > 0) { 
     $Count++; 
    } 
    if(preg_match("/[A-Z]/", $this->PostedData['password']) > 0) { 
     $Count++; 
    } 
    if(preg_match("/[a-z]/", $this->PostedData['password']) > 0) { 
     $Count++; 
    } 
    // This is where I need help 
    if(preg_match("/[~`[email protected]#$%^&*()_-+=\[\]{}\|\\:;\"\'<,>.]/", $this->PostedData['password']) > 0) { 
     $Count++; 
    } 

    if($Count >= $ComplexityCount) { 
     return true; 
    } else { 
     return false; 
    } 
} 

だから、基本的に、私はそれぞれの場合、数字、大文字、小文字、および特殊文字の文字列をチェックしてやっています。私たちは特別なキャラクターに何らの制限もなく、ユニコードキャラクターも必要です。この場合、\ Wは動作するのでしょうか?それとも、数字も含まれていますか?私は\ Wで素晴らしい文書を見つけることができないので、私はこの部分が不明です。

数値や文字を含まないすべての特殊文字とユニコード文字をカバーする簡単な正規表現を知っている人はいますか?

誰かがこれを使用することは自由ですが、私はこれ以上の人がこれを探していると思っています。

+0

あなたの推測のいくつかを説明する素晴らしいページがあります:http://www.regular-expressions.info/reference.html – Marcus

答えて

12

このパターンは、数字またはa-Zでないすべての文字を許可します。

[^\da-zA-Z] 

\Wについては[A-Za-z0-9_]と同じである、否定\wです。したがって、\Wは英字、数字またはアンダースコアではないすべての文字になります。

正規表現の学習のために私がコメントthis is a great resourceとしてコメントしました。ここにはtest the regexのサイトがあります。

+0

私は頭を叩いています。私は以前の小切手と逆のことをすることさえ考えなかったので、ありがとう。お手元にありがとうございました。 - Jeff – Jeff

+0

そして非常に速い応答に感謝します – Jeff

2

あなたは '特別な' 文字のためのPOSIX文字クラス[[:punct:]]を使用することができます。

<?php 
$regex = '[[:punct:]]'; 

if (preg_match('/'.$regex.'/', 'somepas$', $matches)) { 
    print_r($matches); 
} 
?> 

ができます:場合

Array 
(
    [0] => $ 
) 
7

は、特殊文字に一致させたい

preg_match('/[\'\/~`\[email protected]#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/', $input)