「test@test.lt; test2@test.lt; test3@test.lt」という一連のメールがあります。
すべての単語に [@.] が少なくとも 1 回含まれているかどうかを確認する単純な正規表現を作成する方法は?
正規表現は必要ありません:
bool allOk = str.Split(';').All(email => email.Count(c => c == '@') == 1);
これは誤った結果につながる可能性がありますが (foo@bar_foo.com
は有効なメールではありません!)
あなたは試すことができます:
[_a-zA-Z0-9-]+?@[_.a-zA-Z0-9-^;]+;?
これは、文字の後に @ と「;」以外の文字が続くものです。オプションの ; が続きます。 ここでデモを見てください。
RegEx は必要ないと思いますが、使用するパターンは次のとおりです。\b[a-zA-Z0-9]+@[a-zA-Z0-9]+\b
\b
単語境界である場合、英数字の文字セットがあります。+
前の文字が 1 回以上出現することを意味します。したがって、単語境界から、0 個以上の任意の文字の後に @ が続き、1 つ以上の任意の英数字文字の後に単語境界が続く可能性があると言っています。
@jsfviky の回答に対するこの単純なバリエーションでは、ドメイン レベルとローカル部分の両方で電子メール アドレスにピリオドとハイフンを使用でき、使い捨てスタイルの電子メール アドレスのプラス記号も使用できます。
[a-zA-Z0-9-\.\+]{1,}@(?:[a-zA-Z])[a-zA-Z\.-]{1,}.[a-zA-Z]{1,4}
現実的にはこれだけで十分ですが、有効な電子メール アドレスには {|}~` のいずれかが含まれて!#$%&'*+-/=?^_
いる可能性があるため、使用例に応じてこれを変更することをお勧めします。
メールバリデーターが必要な場合は、次の正規表現を試してください。
[a-zA-Z0-9-]{1,}@([a-zA-Z.])?[a-zA-Z]{1,}.[a-zA-Z]{1,4}