2012-03-29 12 views
4

パスワードポリシーのために:4つの 文字クラス(下アルファベットと上部ケースのそれぞれからの少なくとも1つの文字と、正規表現私は、次のパスワードポリシー施行する必要

少なくとも9文字、数字、記号)。

ここに正規表現の専門家がお手伝いできますか? (私はJavaの正規表現エンジンを使用しています)

私たちはここにいる間、これらの種類のタスクのための正規表現を生成することができるオンラインツールはありますか?

ありがとうございます!このパターンはöのような特殊なUTFの文字が含まれていないことを

http://regex.larsolavtorvik.com/

または

http://rubular.com/

+5

正規表現を学習すると何が問題になりますか?あなたが何かをやっている/やっていることを避けようとしているならば、あなたは間違ったサイトにいます。 –

+0

regexの良いリファレンスはhttp://www.vogella.de/articles/JavaRegularExpressions/article.htmlです。あなたがすでに試したreg exを投稿してください –

+2

可能な複製http://stackoverflow.com/questions/3387785/password-validation-regular-expression – cmbuckley

答えて

8
(?=.{9,})(?=.*?[^\w\s])(?=.*?[0-9])(?=.*?[A-Z]).*?[a-z].* 

注:

+0

Worked、ありがとう! – Michael

+0

jqueryを使用してjqueryを使用している場合jqueryの検証プラグインをお勧めします。ここには強力なパスワード要点があります。https://gist.github.com/mrgcohen/9806928 –

+0

@mcあなたは全くセキュリティがありません。サーバーの検証は、関係なく実行する必要があります。 – Dariusz

-1

はここで正規表現を生成するためのオンラインツールです。私は1つの正規表現でこれをしません。あなたがそれを検証したいのであれば、私はそれを分割して各事柄を検索します。

+4

誤解を避けるために、これらのツールは*式を生成するためのものではなく、* testing *用のものです。 –

+0

はい、ただし、トレイルとエラーで式を生成できます。式を使ってテスト/プレイし、それらを知るための素晴らしい方法です。しかし、技術的にはあなたは正しい;) – pascalvgemert

+0

正規表現を開発しなければならず、トレイルとエラーによってそれらを生成するのはエラーが起こりやすいだけです。 – stema

0

私はこの解決するために、複数の正規表現のを使用します。

9文字 - あなたができる正規表現これが、.LENGTHを()> = 9は、はるかに優れています!あなたは1つのPRクラスを使用する必要があります文字クラスについては

[a-z]+ 
[A-Z]+ 
[0-9]+ 
[£$%&{[...]+ //all the possible symbols you want to accept 
or perhaps: 
[:punct:]+ // this depends on your programming language.. 
or like in the suggestion by @david-halter: 
[^\w\s]+ // not alphanumeric or spaces 
5

はここ(肯定先読みを使用して)私はそれを行うだろう方法は次のとおりです。

(?=.{9,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\p{Punct}).* 

全例とテスト:

     // Regexp    Description 
Pattern p = Pattern.compile("(?=.{9,})" +  // "" followed by 9+ symbols 
          "(?=.*[a-z])" +  // --- ' ' --- at least 1 lower 
          "(?=.*[A-Z])" +  // --- ' ' --- at least 1 upper 
          "(?=.*[0-9])" +  // --- ' ' --- at least 1 digit 
          "(?=.*\\p{Punct})"+ // --- ' ' --- at least 1 symbol 
          ".*");    // the actual characters 
String[] tests = { 
     "aB99",   // too short 
     "abcdefghijk", // missing A 
     "abcdefGHIJK", // missing 5 
     "12345678910", // missing a 
     "abcDEF12345", // missing punct 
     "abcDEF-2345" // works! 
}; 

for (String s : tests) { 
    boolean matches = p.matcher(s).matches(); 
    System.out.printf("%-12s: %b%n", s, matches); 
} 

出力:

aB99  : false 
abcdefghijk : false 
abcdefGHIJK : false 
12345678910 : false 
abcDEF12345 : false 
abcDEF-2345 : true 

最終発言:このアプローチの問題は、それは非常にユーザーフレンドリーではないということです。 「パスワードに数字記号がありません」などのユーザーに分かりやすい返答をする場合は、再度作業を行う必要があります(どの要件が失敗したかを把握するため)。

関連する問題