2017-09-28 18 views
-3

正規表現が文字列中の空白を見つけるための提案がありません。はい、次のループのための文字列をループするという概念はうまくいくでしょう。私は本当に正規表現とパターンマッチャーでこれを行う方法を学びたい!私の質問はどこで私は私の正規表現の文字列に追加する必要がありますので、それは偽を返しますか?以下のコード私は無用に(\\ s)の多数の化身を追加しました。私は空白を削除したくありません。java regex文字列内のすべての空白を見つけよう

リンクはコメント

String tstr = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[[email protected]$!%*?&])[A-Za-z\\[email protected]$!%*?&]"; 

String astr = etPW.getText().toString().trim(); 
Pattern regex = Pattern.compile(tstr); 
Matcher regexMatcher = regex.matcher(astr); 

boolean foundMatch = regexMatcher.find(); 

if(foundMatch == false){ 
    Toast.makeText(MainActivity.this, "Password must have one Numeric Value\n" 
     + "\nOne Upper & Lower Case Letters\n" 
     + "\nOne Special Character $ @ ! % * ? &", Toast.LENGTH_LONG).show(); 
    //etPW.setText(""); 
    //etCPW.setText(""); 
    // Two lines of code above are optional 
    // Also by design these fields can be set to input type Password in the XML file 
    etPW.requestFocus(); 

    return ; 
} 
+0

パスワードの要件は何ですか?なぜ文字クラスで '$'を2回繰り返すのですか?私は何度も見てきました。なぜそれが何をしているのかを実際に理解することなく正規表現をコピーするのはなぜですか?そして、あなたはその一部をコピーしたようです。 –

+0

@WiktorStribiżew私はコードを完全に理解していないかもしれないことに私は同意するが、正規表現テスターサイトなどからこのコードをコピーした。要件には、大文字の大文字と小文字が1つ含まれていて、数字は許可されています。私は文字クラスで$を2回削除してテストします。OK Dupesが削除されました。ありがとうございました –

+0

ダブル '$'は何の害もなく、悪いスタイルです。 ?=。* [az](?=。* [AZ])(?=。* \\ d)(?=。* [$ @ $!%*?&])\\ S * "'を使用しますが、 'regexMatcher.matches()'と一緒に使用してください。実際の要件を含めるように質問を更新してください。 –

答えて

2

あなたは、スペースをチェックするために、負の先読みを使用することができますで提案されている私は、コードの重複として提案テストし、それが見動作しません:

^(?!.*)

^ - 文字列の先頭でマッチングを開始します。

(?! - 。どれ非改行文字スペースが続く何度でも

) - - 否定先読みグループ(括弧内のパターンは次の来てはならない

.*に開始します。閉じます負先読みグループ完全正規表現パターン(また、冗長性を除去するためのビットをクリーンアップ)と組み合わせる

+0

なぜか分かりませんが、最初のグループ化は\この例の^(?!。* \\ s)Android Studioのこの長い会話をどのように見ていても、それは働く方法です。貢献して助けてくれた皆様、ありがとうございます! –

+0

@James_Duh私は投稿したようにコメントしてくれてありがとう、それは動作しませんでした正規表現は、あなたが働いている味に応じて独自のアイデアを持っているようです – Grendel

関連する問題