HTML5メール検証


102

「HTML5を使用すると、ユーザーの入力が有効な電子メールまたはURLアドレスであるかどうかを確認するために、これ以上jsまたはサーバー側コードは必要ありません。」

ユーザーの入力後にメールを検証するにはどうすればよいですか?JSを使用せずに、ユーザーが自分のメールアドレスの間違ったフォームを入力した場合にメッセージを表示する方法。

<input type="email" pattern="[^ @]*@[^ @]*" placeholder="Enter your email">
<input type="submit" value="Submit">

49
常にサーバー側で検証する必要があります。賢いクライアントは、クライアント側のセキュリティ対策を回避できます。
Benjamin Gruenbaum 2013年

この回答は、HTML5フォーム検証を設定しようとするときに役立ちます。もちろん、おそらくまだサーバー側の検証が必要です。
Joeytje50 2014年

2
正規表現の電子メール検証は、いかなる状況でも使用してはなりません。正規表現チェックには欠陥が多すぎます。電子メールアドレスを「検証」する最良の方法は、単純に2度入力して正規表現チェックを実行し、パターンに一致しない場合は有効な電子メールアドレスではないという警告をユーザーに与えることです。ユーザーに再確認を求めます。このように、実際には有効であるが正規表現が失敗している場合(頻繁に発生するように)、ユーザーはそれが有効であることを認識して続行することができます。非常に多くのサイトが正規表現検証を使用しており、多くのユーザーにとって苛立たしいものです。
Soundfx4 2016年

この記事をチェックすることをお勧めします:debounce.io/blog/articles/email-validation-for-html5-forms
Iman Hejazi

ユーザーに同じメールアドレスを2回入力するように要求しても意味がありません。メールアドレスがわからない場合は、2回入力してもオッズは改善されません。ユーザーが自分のメールアドレスを知っている場合、2回入力するように求めるだけではUIは不十分です。
ミッコランタライネン

回答:


120

HTML5では、次のようにできます。

<form>
<input type="email" placeholder="Enter your email">
<input type="submit" value="Submit">
</form>

ユーザーが送信を押すと、次のようなエラーメッセージが自動的に表示されます。

エラーメッセージ


3
ここでのパターンの利点は何ですか?タイプを電子メールとして指定すると、これを判別するための組み込みパターンがすでに含まれています。
リッチブラッドショー

3
@RichBradshaw:はい、あなたは正しいです。パターンを指定する必要はありません(OPからコードをコピーしただけで、今は修正しました:))
Midhun MP '26 / 10/26

6
@MichaelDeMutis:required属性を使用できます
Midhun MP 2014

29
メールはメールでチェックさ.comれません。@記号のみをチェックします。例 example@gmailフォームを入力して保存できます。有効なメールアドレスではありませんが。適切にチェックするための回避策はありますexample@gmail.comか?
ルチカ2017年

9
@リズ。example@gmail有効なメールではない可能性がありますが、有効なメールアドレス形式です。
pajaja 2017

47

www.w3.orgサイトのinput type=emailページには、電子メールアドレスが次の正規表現に一致する任意の文字列であることが記載されています。

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

required属性と属性を使用してpattern、正規表現パターンに一致する値を要求します。

<input
    type="text"
    pattern="/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/"
    required
>

14
2つの「/」と開始「^」および終了「$」記号なしでパターンを挿入する必要があります。このように[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*
ビクター

4
@ビクター申し訳ありませんが、あなたは部分的に間違っています。この記号は重要です。これらの記号がないと、パターンは文字列のどこにでも一致し始め、役に立たなくなります。あなたが正しいところは、スラッシュを外に出すことです。
Hexodus 2016

@ビクターあなたの答えは私のために働いた。OPの正規表現では、フォームの有効なメールアドレスであっても、フォームの要件に一致すると誤認してしまいます。多分それは私が通常のHTMLを使用していないが、React JSを使用してHTMLフォームをレンダリングしていることです。
Ka Mok 2016年

正解はDOMNodeのbooleanプロパティを使用type="email"して確認するvalidことです-基になる正規表現を繰り返す必要はありません
Dominic

これについて言及していただきありがとうございます。
ステファンCiprian Hotoleanu

17

使用[a-zA-Z0-9.-_]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}のためにsomemail@email.com/somemail@email.com.vn


4
この正規表現は、電子メールアドレスに多くの不適切な要件を課します。たとえば、1文字または2文字のユーザー名を持つ電子メールアドレス、または1文字のドメイン名でホストされている電子メールアドレスを拒否します。
duskwuff -inactive- 2016

編集されました。ありがとう@duskwuff
Van Nguyen

それでも1文字のドメイン名は拒否されます。
duskwuff -inactive- 2016

これにより、1つの文字/番号のドメインが許可されます:[a-zA-Z0-9 .-_] {1、} @ [a-zA-Z0-9 .-] {1、} [。] {1} [a-zA -Z0-9] {2、}
ラダー

また、たとえば、これpostmaster@aiは有効なメールアドレスであり、この正規表現もこれを禁止することに注意してください。(出典:serverfault.com/q/154991/104798
ミッコRantalainen

12
document.getElementById("email").validity.valid

フィールドが空または有効な場合はtrueのようです。これには他にも興味深いフラグがあります。

ここに画像の説明を入力してください

Chromeでテスト済み。


8

これが、フォームのすべての電子メール入力に使用する例です。この例はASP.NETですが、次のものに適用されます。

<asp:TextBox runat="server" class="form-control" placeholder="Contact's email" 
    name="contact_email" ID="contact_email" title="Contact's email (format: xxx@xxx.xxx)" 
    type="email" TextMode="Email" validate="required:true"
    pattern="[a-zA-Z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*" >
</asp:TextBox>

HTML5は、不要な場合でもパターンを使用して検証します。まだ偽陽性だったものを見つけていません。

これは、次のHTMLとしてレンダリングされます。

<input class="form-control" placeholder="Contact's email" 
    name="contact_email" id="contact_email" type="email" 
    title="Contact's email (format: xxx@xxx.xxx)" 
    pattern="[a-zA-Z0-9!#$%&amp;'*+\/=?^_`{|}~.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*">

7

私はあなたがJavascriptソリューションの後にではないことを知っていますが、私の経験から、JSを使用してのみ実行できるカスタマイズされた検証メッセージなどのいくつかのものがあります。

また、JSを使用すると、すべての入力フィールドを変更する必要がなく、サイト内のタイプがemailのすべての入力フィールドに検証を動的に追加できます。

var validations ={
    email: [/^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/, 'Please enter a valid email address']
};
$(document).ready(function(){
    // Check all the input fields of type email. This function will handle all the email addresses validations
    $("input[type=email]").change( function(){
        // Set the regular expression to validate the email 
        validation = new RegExp(validations['email'][0]);
        // validate the email value against the regular expression
        if (!validation.test(this.value)){
            // If the validation fails then we show the custom error message
            this.setCustomValidity(validations['email'][1]);
            return false;
        } else {
            // This is really important. If the validation is successful you need to reset the custom error message
            this.setCustomValidity('');
        }
    });
})

リンクの回答だけを投稿しないでください。リンクの重要な部分を答えに入れてください
Rizier123

4

パーティーには少し遅れましたが、この正規表現はクライアント側での電子メールタイプの入力を検証するのに役立ちました。ただし、常にサーバー側でも検証を行う必要があります。

<input type="email" pattern="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$">

ここでは、あらゆる種類の正規表現を見つけることができます。


4

TL; DR:唯一の100%正しい方法は、入力された電子メールアドレスのどこかに@記号があるかどうかを確認し、指定された電子メールアドレスに検証メッセージを投稿することです。メールメッセージの検証手順を実行できる場合、入力したメールアドレスは正しいものです。

長い答え:

David Gilbertsonはこの数年前に次のように書いています

私たちが尋ねる必要がある2つの質問があります:

  1. ユーザーは、このフィールドにメールアドレスを入力することになっていることを理解しましたか?
  2. ユーザー自分のメールアドレスをこのフィールドに正しく入力ましたか?

「電子メール」というラベルの付いたうまくレイアウトされたフォームがあり、ユーザーがどこかに「@」記号を入力した場合、ユーザーが電子メールアドレスを入力することになっていると理解したと言っても安全です。簡単です。

次に、電子メールアドレスを正しく入力したかどうかを確認するために検証を行います。

ありえない。

[...]

入力ミスをすると間違いなくメールアドレスが不正確になりますが、メールアドレスが無効になる可能性があります。

[...]

メールアドレスが「有効」である場合、解決しようとしても意味がありません。ユーザーは、無効なアドレスを入力するよりも、間違った有効なメールアドレスを入力する可能性がはるかに高くなります

つまり、どのような種類の文字列ベースの検証でも、構文が無効かどうかしか確認できないことに注意することが重要です。ユーザーが実際に電子メールを表示できるかどうかを確認することはできません(たとえば、ユーザーが既に資格情報を入力したか、他の人のアドレスを入力したか、特定のユースケースの個人の電子メールアドレスの代わりに仕事用の電子メールを入力したため)。あなたが実際に求めている質問は、「このメールは構文的に有効ですか」ではなく、「指定されたメールアドレスを使用してユーザーと通信できますか」という頻度です。「を含む@」よりも文字列を検証すると、前の質問に答えようとしていることになります。個人的に、私はいつも後者の質問だけに興味があります。

さらに、構文的または政治的に無効である可能性がある一部の電子メールアドレスは機能します。たとえばpostmaster@ai、TLDにMXレコードを含めないようにしてもは技術的に機能しますWHATWGメーリングリスト(そもそもHTML5が設計されている)での電子メール検証に関する説明も参照してください。


2

HTML 5を使用して、入力メールを次のようにします。

<input type="email"/>

ユーザーが入力ボックスにカーソルを合わせると、有効な電子メールを入力するように指示するツールチップが表示されます。ただし、Bootstrapフォームには、ユーザーに電子メールアドレスを入力するように通知するためのより優れたツールチップメッセージがあり、入力した値が有効な電子メールと一致しないときにポップアップ表示されます。


ただし、「abc @ gmail」のようなケースは無効になりません。
nbsamar

はい、そうだと思います。たとえば、ユーザーがgmailやhotmailを入れた場合、ユーザーが他のものを入れてから、ログインを続行させないようにしたいのですが、どうすればよいですか?
サイモン

2

このパターンにも従うことができます

<form action="/action_page.php">
  E-mail: <input type="email" name="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$">
  <input type="submit">
</form>

参照:W3Schools内


1
<input type="email" name="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$" title="please enter valid email [test@test.com].">タイトルを追加して、有効性メッセージを表示することもできます。
imdzeeshan

1

MDNよると、このRegExpは、仕様を満たす電子メールが一致する必要があるため、電子メールの検証に問題がないとしています。

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

0

HTML5の属性「パターン」を使用するだけでメールを正しく検証することは非常に困難です。「パターン」を使用しない場合、someone @が処理されます。これは有効なメールではありません。

を使用pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}"するにはフォーマットが必要ですがsomeone@email.com、送信者がsomeone@email.net.au(または類似の)のようなフォーマットを持っている場合、これを修正するために検証できません。pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}"これを配置して「.com.auまたは.net.auなどを検証ます。

ただし、これを使用すると、someone @ email.comによる検証は許可されません。したがって、HTML5を使用して電子メールアドレスを検証するだけでは、まだ完全には私たちにはありません。これを完了するには、次のようなものを使用します。

<form>
<input id="email" type="text" name="email" pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}" required placeholder="Enter you Email">
<br>
<input type="submit" value="Submit The Form">
</form>

または:

<form>
<input id="email" type="text" name="email" pattern="[a-zA-Z]{3,}@[a-zA-Z]{3,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}[.]{1}[a-zA-Z]{2,}" required placeholder="Enter you Email">
<br>
<input type="submit" value="Submit The Form">
</form>

ただし、HTML5パターン属性を使用してメールアドレスの両方またはすべてのバージョンを検証する方法がわかりません。


1
正規表現チェックは、いかなる状況でも使用してはなりません。パターンが多すぎて、欠陥が多すぎます。たとえば、someone + customwordhere @ email.comは、実際には100%有効であるにもかかわらず、多くの正規表現チェックでは無効と見なされます。正規表現は私のものや他の多くのユーザー側のとげであり、それは行かなければなりません。ユーザーが有効なメールアドレスを入力していることを確認する別の方法を使用する必要があります。
Soundfx4 2016年

また、たとえば、これpostmaster@aiは有効なメールアドレスであり、この正規表現もこれを禁止することに注意してください。(出典:serverfault.com/q/154991/104798
ミッコRantalainen

HTML5とともに、DeBounceなどの電子メール検証ツールも推奨されます。
Iman Hejazi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.