0

次のようなコードで使用する電子メールアドレス検証正規表現があります。

public class Test {

  public static void main(String[] args) {
    try {
      String lineIwant = "myname@asl.ramco-group.com";
      String emailreg = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
      Boolean b = lineIwant.matches(emailreg);

      if (b == false) {
        System.out.println("Address is Invalid");
      }else if(b == true){
        System.out.println("Address is Valid");
      }
    } catch (Exception e) {

      e.printStackTrace();
      System.out.println(e.getMessage());
    }
  }
}

この例の特定の電子メール アドレスでは、ブール値は false を返しますが、これは有効な顧客の電子メール アドレスです。

との間のハイフンが原因であるとramco思わgroupれます。それを削除すると、ブール値がtrueを返すためです。

そのようなメールアドレスに対応するように正規表現を変更するにはどうすればよいですか?

4

4 に答える 4

16

この問題を自分で解決しようとしないことをお勧めします。EmailValidator代わりに、commons-validatorなどの十分にテストされたソリューションに依存してください。

例えば:

EmailValidator.getInstance().isValid(emailAddressString);
于 2013-04-30T09:33:42.820 に答える
3

使用できる多くの正規表現検証文字列があります。ここのように

しかし、最適解を持つことは本当に必要ですか? 99.9999% の使用済みアドレスをカバーする準最適なソリューションだけが必要ではないですか?

この記事を読む

于 2013-04-30T08:31:43.717 に答える
2

\\-の後に正規表現文字列のそのセクションに追加し@ます。

\\、2 つの値の差を示すために通常使用されるダッシュを使用しないことを Java に伝えるエスケープです。このように...

^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9\\-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$

アップデート

ティムはコメントで、エスケープは必要ないことを認めました!

\wそして、私自身の簡単なヒントは、 replace ofを使用したい場合がある[A-Za-z0-9_]ため、何度も書き続ける必要がないということです。そして最後に、このサイトに慣れてください。正規表現の使用を開始すると、非常に役立ちます。

于 2013-04-30T08:28:49.487 に答える