2

at 文字が Android 編集ビューにのみ存在するかどうかを確認しようとしています。私は正規表現が初めてで、今後のコードを実装しました。どこが間違っていますか?これが私のコードです

try {

        Pattern pattern = Pattern.compile("/@");
        Matcher matcher = pattern.matcher(valEmail);

        if (!matcher.matches()) {

            Toast.makeText(this," Invid no @ character ",Toast.LENGTH_LONG).show();

        }

    }catch(Exception ex){}
4

5 に答える 5

6

現在のコードには 2 つの問題があります。

  • 先頭のスラッシュは、単に "@" ではなく "/@" を実際に探していることを意味します。「/」は正規表現内で何か特別なことをしていると考えているようですが、そうではありません。
  • 入力全体matches()と一致させようとする which を使用しています。入力のどこかで正規表現の一致を見つけようとするだけです。find

しかし、なぜ正規表現を使用しているのですか? それだけではない理由:

if (!valEmail.contains("@")) {
    ...
}

これにより、アドレスに「@」記号が含まれているかどうかがチェックされます。「@」記号が1 つしかないことを確認したい場合は、次のように使用できます。

int atIndex = valEmail.indexOf('@');
if (atIndex == -1) {
    // Handling for *no* @ sign
}
if (valEmail.indexOf('@', atIndex + 1) != -1) {
    // Handling for multiple @ signs
}

正規表現を使用したい場合は、より洗練された電子メール アドレス検証の正規表現を利用できます。(さまざまなレベルの有効性を持つさまざまなものがたくさんあります。正規表現の Java フレーバー用に設計されたものを入手してください。)ただし、これだけのために 1 つを使用することはありません。パターン マッチングに本当に関心がある場合にのみ、正規表現を使用してください。 .

「少なくとも 1 つの非 @、その後に @、その後に少なくとも 1 つの非 @ が続く」という正規表現を使用する場合は、次のように使用できます。

// TODO: Compile this once and reuse
Pattern pattern = Pattern.compile("[^@]+@[^@]+");
Matcher matcher = pattern.matcher(valEmail);

if (!matcher.matches()) {
    ...
}

余談ですが、これは:

catch(Exception ex){}

決して良い考えではありません。エラーを無差別に無視しないでください。

于 2012-04-25T06:13:48.017 に答える
2

電子メールの場合、正規表現の下を使用できます。

 private static final String EMAIL_PATTERN = "^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$";



    try {

    Pattern pattern = Pattern.compile(EMAIL_PATTERN);
    Matcher matcher = pattern.matcher(valEmail);

    if (!matcher.matches()) {

        Toast.makeText(this," Invid no @ character ",Toast.LENGTH_LONG).show();

    }

}catch(Exception ex){
}
于 2012-04-25T06:16:00.263 に答える
1

/そこにあってはならない正規表現の先頭があります。

findさらに、ではなくを使用する必要がありますmatches

于 2012-04-25T06:12:28.843 に答える
1

matches()メソッドは、文字列全体が正規表現に一致するかどうかをチェックします。find()マッチの代わりにメソッドを使用する必要があります。そして、/文字はそこにあるべきではありません。
ただし、これらすべての代わりにcontains()、文字列のメソッドを使用することをお勧めします。if(valEmail.contains("@"))

于 2012-04-25T06:15:01.313 に答える
0

@最初に a なしで使用/します。

于 2012-04-25T06:14:31.677 に答える