現在のコードには 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){}
決して良い考えではありません。エラーを無差別に無視しないでください。