web-dev-qa-db-ja.com

Dartのメールアドレスを検証しますか?

RegExp ドキュメントによると、JavaScriptPerl 5)正規表現: ECMA仕様 。メールの検証にはどのようなパターンを使用しますか?

24
Eric Lavoie

HTML5の電子メール検証仕様で標準化することをお勧めします。これは、RFC822とは異なり、非常にほとんど使用されない電子メールアドレスの機能(コメントなど)を許可しない点が異なりますが、正規表現で認識できます。

HTML5仕様のメール検証に関するセクションは次のとおりです。 http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e -mail-state-%28type = email%29

そしてこれは正規表現です:

^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,253}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,253}[a-zA-Z0-9])?)*$
27
Justin Fagnani

そのため、単純な正規表現はかなりうまくいきます。

var email = "[email protected]"
bool emailValid = RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(email);
61
Airon Tark

私は次のパターンを使用します: validate-email-address-in-javascript 。 (スラッシュを削除/区切り文字とDart区切り文字を追加します:r'')。

bool isEmail(String em) {

  String p = r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';

  RegExp regExp = new RegExp(p);

  return regExp.hasMatch(em);
}

編集:

電子メール検証の詳細については、次の投稿を参照してください: dominicsayers.com および regular-expressions.info 。このツールも非常に役立つ場合があります: gskinner RegExr

編集:ジャスティンはより良いものを持っています。私は彼が提案したパターンを使用しています。

16
Eric Lavoie

私が見つけた最良のregExパターンはRFC2822電子メール検証です:

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

取得元: regexr.com/2rhq7

私がテストした他のすべての正規表現は、文字列email@emailを正として、これは偽です。

9
David_E

Dartでのメール検証、正規表現に従ってください:

bool validateEmail(String value) {
  Pattern pattern =
      r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
  RegExp regex = new RegExp(pattern);
  return (!regex.hasMatch(value)) ? false : true;
}

void main() {
  print(validateEmail("[email protected]"));
}

以下の正規表現をフローします。

r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'

参照: https://Gist.github.com/aslamanver/3a3389b8ef88831128f0fa21393d70f

3
Googlian

2019正解

Dart/Flutterで電子メール検証を適切にサポートするには、pub.devパッケージemail_validatorを参照してください。

ソース: https://github.com/fredeil/email-validator.Dart

_

これは正しくサポートします:

  • TLD [オプション]
  • 国際ドメイン[オプション]
  • フィルタリングされたドメイン(例:[email protected]
  • ドメインレスアドレス(例:user @ localhost)
3
Lance

[email protected]および[email protected]ドメインも許可する単純でそれほど厳密ではないバリデーターを使用しました。

var email = "[email protected]";
  bool emailValid = RegExp(r'^.+@[a-zA-Z]+\.{1}[a-zA-Z]+(\.{0,1}[a-zA-Z]+)$').hasMatch(email);
  print (emailValid);
1

私は電子メール検証を検索するためにこのページに到達しましたが、ここにある例はすべて私のテストに合格していません。

したがって、私は自分のregExを書くことを決め、他の答えからの概念のいくつかを(巨人の肩の上に立って)適応させました。

^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9][a-zA-Z0-9-]{0,253}\.)*[a-zA-Z0-9][a-zA-Z0-9-]{0,253}\.[a-zA-Z0-9]{2,}$

そのパターンに問題がある場合は、お知らせください。

1
bitfreeze

私が検索しているときにこのページを何度か見たことがありますが、後でこのページにアクセスする人に役立つかもしれない、Dart用のより単純なRegexを考え出しました。

ここに正規表現があります:

^[^@]+@[^@]+\.[^@]+

Dartでは、次のように使用できます

RegExp(r'^[^@]+@[^@]+\.[^@]+')

通常のメールのみをサポートし、TLDはサポートしません。たとえば、me @ email.comではなくme @ localhostです。それが役に立てば幸い。

1
Majid

これまでに出会った中で最も優れた正規表現は次のとおりです。

r '([a-z0-9] [-a-z0-9 _ +。] [a-z0-9])@([a-z0-9] [-a-z0-9。] [a-z0-9]。(com | net)|([0-9] {1,3}。{3} [0-9] {1,3})) '

このアプローチは、ユーザーがログインできるようにしたいすべてのドメイン名を追加することに依存しています。

comとnetを追加したのは、それらが最も人気のあるものだからです。

0
Ammar