質問するログイン新規登録
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

2356閲覧

C# メールアドレスバリデーションチェック正規表現

Tsuzuki24

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/12/16 01:42

0

0

前提

C#でメールアドレスのバリデーションチェックを行いたいのですが、バリデーションしたい項目であるトップレベルドメイン(@gmail.comのcomの部分などドメイン最終部)が2文字未満であるメールアドレスを入力してもバリデートすることができません。(Regex.IsMatch = true)
以下の正規表現に問題があればご指摘いただけませんでしょうか。

実現したいこと

バリデーションしたい項目としてはメールアドレスの形式に最低限当てはまっていることを確認することと、トップレベルドメイン(@gmail.comのcomの部分などドメイン最終部)が2文字以上存在することを確認することです。

該当のソースコード

C#

1bool validateResult = Regex.IsMatch(PERSONAL_MAIL, @"^(?:[^\@]+?@[A-Za-z0-9_.\-]+.+[A-Za-z.\-_]{2,})*$");

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

.+[A-Za-z.\-_]{2,}

ここが TLD の部分だと思いますが、最初の .+ は任意の1文字以上なのでドット以外にもマッチします。[] の中にも . が入っているため、正規表現のこの部分だけでも foo.example.c のような文字列にもマッチしてしまいます。ただしくは\.[A-Za-z0-9\-]{2,} でしょう。

また、全体が ^(?: ... )*$ と0回以上繰り返しになっているため、空文字列や foo@example.combar@exmaple.com のようなものにもマッチするでしょう。

投稿2022/12/16 02:08

編集2022/12/16 02:20
int32_t

総合スコア21933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tsuzuki24

2022/12/16 02:23

ご丁寧な回答ありがとうございます!ご指摘の通り修正しましたところ意図通りバリデーションできました!!
guest

0

トップレベルドメイン(@gmail.comのcomの部分などドメイン最終部)が2文字以上存在することを確認することです。

そもそも論ですが、ドメインは国際化しています。@はじめよう.みんなのような日本語ドメインすら正当に存在するものですので、英数字をチェックすることそのものが不適切となります。

投稿2022/12/16 01:47

maisumakun

総合スコア146706

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2022/12/16 01:51

まず実用されないとは思いますが、@[192.0.2.1]のような「IPアドレスを角カッコで括ったもの」も、RFC上では正当なメールアドレスです。
Tsuzuki24

2022/12/16 01:53

こちらは日本語ドメインなどイレギュラーなものは使用されない前提での仕様となっております。 回答いただきありがたいのですが、こちらの回答は私の求めているものではありません。
maisumakun

2022/12/16 01:55

実在するアドレスを「イレギュラーだから」と弾いてしまう、という考え方そのものが不適切だ、という趣旨の回答です。
Tsuzuki24

2022/12/16 01:59

ご回答ありがとうございます。 それではこちらはメールアドレスが存在するかどうかを判断する目的ではなく、単に正規表現として上記の誤りを指摘いただきたいという趣旨と致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問