2017-05-09 19 views
-5

isUpperCase(),などの代わりに正規表現を使用するように言われていますが、正規表現をどのように使用するかについての手がかりはありません。正規表現を使用した特定の文字列の妥当性

これは私がチェックするために必要なものです:

length min = 8 characters 
length max = 20 characters 
must contain at least one lower case character (a-z) 
must contain at least one upper case character (A-Z) 
must contain at least one number (0-9) 
must contain at least one special character 

感謝。

+0

この質問は研究努力を示していません。 – VGR

+1

彼は努力して見つけたStackoverflow xD – Antoniossss

+0

http://stackoverflow.com/questions/12018245/regular-expression-to-validate-username – quackenator

答えて

0

大文字の正規表現はであり、小文字は[a-z] 少なくとも1つの指定された文字グループでの両方のテストです。あなたが学びたいのであれば

1

、正規表現を使用する方法を、私は、次の

  • は、あなたの講義が
  • は、Javaの本(「パターン」について特に章と「正規表現」)を読んでノートをよく読んでお勧めします
  • Javaのドキュメントを読んでください。およそPattern
0

ここでは、JavaScriptの例です。 Javaは似ています:

var password = '0Aa!.......' 
const regexp = /[0-9]?[a-z]?[A-Z]?[^0-9A-Za-z]?/; 
var isValid = (password.length >= 8 && password.length <= 20) && regexp.test(password); 

これは、少なくとも一つの数、そして1つの資本、そして1つの小文字、数字または文字ではありません、その後1があることをテストします。正確な解決策ではなく、その概念を示しています。

私は他の人に読んでください。正規表現とJavaは十分に文書化されています。

+0

これは "AAAAAAAA"と一致しませんか?あなたの例では、非常に特定の順序が必要です。私は先読みなしでこれが可能だとは思わない。 – quackenator

+0

あなたは正しい、テンションが良い。正確な解決策ではなく、正規表現の使い方を実証しようとしていました。問題はダウン投票されましたが、私は著者により多くの読書をする出発点を与えたいと思っていました。だからこそ私は(彼が探していた)Javaで答えを出さなかったのです。 –

0

注:私はこれをJavaでテストしていませんが、これはpcreエンジンで動作します。

内訳
^(?=.{8,20}$)(?=[^A-Z]*?[A-Z])(?=[^a-z]*?[a-z])(?=[^0-9]*?[0-9])(?=[^[email protected]#$%^&*]*?[[email protected]#$%^&*])[[email protected]#$%^&*]+$ 

^(?=.{8,20}$)    //this matches 8 to 20 characters, inclusive (positive lookahead) 
    (?=[^A-Z]*?[A-Z])   //this matches if one uppercase letter is present (positive lookahead) 
    (?=[^a-z]*?[a-z])   //this matches if one lowercase letter is present (positive lookahead) 
    (?=[^0-9]*?[0-9])   //this matches if one digit is present (positive lookahead) 
    (?=[^[email protected]#$%^&*]*?[[email protected]#$%^&*]) //this matches if one special character is present (positive lookahead) 
    [[email protected]#$%^&*]+$  //this matches if the enclosed characters are present 

これは何をしたいのトップ上のビットかもしれませんが、私はここでそれをテストしています https://regex101.com/r/P0J4X8/1

また、怠惰な評価者は不要です先読みで

+0

ありがとうございました。私はJavaでこれをテストします。 この追加チェックで正規表現がどのようになるのか質問してもいいですか(「1つ以上の連続した文字は含まれてはいけません」)? – JohnLocke

+0

私は以下の文字列を試しました: ".getInfo(0)$%@;"しかしそれはうまくいかなかった。 – JohnLocke

+0

私は否定的な先読み、グループのキャプチャ、およびキャプチャグループの繰り返しを調べます。 – quackenator

関連する問題