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])?)*$
そのため、単純な正規表現はかなりうまくいきます。
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);
私は次のパターンを使用します: 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 。
編集:ジャスティンはより良いものを持っています。私は彼が提案したパターンを使用しています。
私が見つけた最良の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
を正として、これは偽です。
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
2019正解
Dart/Flutterで電子メール検証を適切にサポートするには、pub.devパッケージemail_validator
を参照してください。
ソース: https://github.com/fredeil/email-validator.Dart
_
これは正しくサポートします:
[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);
私は電子メール検証を検索するためにこのページに到達しましたが、ここにある例はすべて私のテストに合格していません。
したがって、私は自分の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,}$
そのパターンに問題がある場合は、お知らせください。
私が検索しているときにこのページを何度か見たことがありますが、後でこのページにアクセスする人に役立つかもしれない、Dart用のより単純なRegexを考え出しました。
ここに正規表現があります:
^[^@]+@[^@]+\.[^@]+
Dart
では、次のように使用できます
RegExp(r'^[^@]+@[^@]+\.[^@]+')
通常のメールのみをサポートし、TLDはサポートしません。たとえば、me @ email.comではなくme @ localhostです。それが役に立てば幸い。
これまでに出会った中で最も優れた正規表現は次のとおりです。
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を追加したのは、それらが最も人気のあるものだからです。