HTML5フォーム検証でドットなしのメールが許可されるのはなぜですか?


112

HTML5のフォーム検証を示すために、非常に単純なモックアップを作成しています。ただし、メールの検証ではアドレスのドットはチェックされず、ドットに続く文字もチェックされないことに気付きました。

つまり、「john @ doe」は有効なメールアドレスではない場合、有効と見なされます。「doe」はドメインではありません。

これは私が私のメールフィールドをコーディングしている方法です:

<input type="email" required />

それで十分ではありませんか?

このフィドルをチェックして、私の意味を確認してください。

注:代わりに、RegExパターンを使用してこれを行う方法を知っています。私は誰かが代わりに電子メールの種類を使うことでどうやって逃げることができるのだろうと思っています。


10
In other words, "john@doe" is considered valid, when it's clearly not a valid email address; doe isn't a domain.はい、doe間違いなくドメインである可能性があります(と考えてくださいlocalhost)。そのアドレスは技術的に仕様に基づいて有効です。
admdrew 2013

2
@admdrew Heh ...メールサーバー自体から電子メールを送信していて、「friend @ localhost」と書くことにした場合、これは興味深いケースになります
Katana314

@ Katana314-うん、うん。ほとんどの(適切に構成された)メールサーバーは、予期されたドメインと一致しないアドレスに送信されるメッセージを拒否するため、一般的に言えば、localhostアドレスに問題はありません。
admdrew 2013

回答:


83

なぜなら、a @ bは有効な電子メールアドレスです(たとえば、localhostは有効なドメインです)。http://en.wikipedia.org/wiki/Email_address#Examplesを参照してください

また、常にサーバーで入力検証を行う必要があることに注意してください。クライアント側の検証は、簡単に迂回できるため、ユーザーにフィードバックを提供することのみを目的としており、信頼されるべきではありません。


7
ありがとう。この箱から出してすぐに使える電子メール検証からどのようなメリットが得られるのか、私にはわかりません。Facebookは、誰かがa @ bアドレスでサインアップすることを許可しません。情報ありがとうございます。(私はあなたの回答に反対票を投じませんでした)
WEFX 2013

6
パブリックアクセスが可能なFacebookのようなWebサイトの場合は、役に立ちません。しかし、内部のWebサイトについて考えてみてください。joe @ supportにメールを送ることをお勧めします。しかし、それは最小限の使用であるとも思います。それにもかかわらず、Webブラウザは、最も一般的なケースではなく、標準(RFC)に基づいて実装する必要があります。
Ali Alavi

9
最後に誰かが実際にlocalhostにメールを送信したのはいつでしょうか。
マシューロック

2
最短作業の電子メールアドレス(の追記の一つとしてrecordsetter.com/world-record/shortest-email-address/4327)であるau@ua
Kyborek

132

理論的には、 "。"なしでアドレスを持つことができます。に。

技術的には次のようなものなので、

user@com
user@localserver
user@[IPv6:2001:db8::1]

すべて有効なメールです。

したがって、標準のHTML5検証では、珍しいものを含むすべての有効な電子メールが許可されます。

(標準を読む代わりに)いくつかの読みやすい説明:http : //en.wikipedia.org/wiki/Email_address#Examples


1
同意した、これは「解決策」ではなく「なぜ」に答える。その理由も知りました。今、私は「修正」しないことを知っています。
Eleanor Zimmermann

最初のタイプの例はドメインuzです。これは、2018年10月の時点でIPを直接ポイントしています。を実行するとnslookup uz、をポイントする91.212.89.8ため、このドメインにもメールを送信できるはずです。
PulseJet 2018年

36

これを入力に追加してみてください

pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,63}$"

フィドル


2
多くの新しいドメインが利用可能です(つまり、accountants [11]、international [13]など)、最大長が63の場合、正規表現パターンの長さの値は{2、63}になります。
unasAquila 2014

42
-1。まず、これによって何が許可または制限されるのか、またなぜ誰かがそれらのルールを必要とするのかを説明しようとはしていません。第二に、それは標準の許可よりもはるかに制限的です(私は標準を読んだりふりしたりするつもりはありませんが、たとえば、en.wikipedia.org / wiki / Email_address#Internationalization またはStackの多くの電子メール検証の質問を参照してください奇妙なメールアドレスの例のオーバーフロー)。なんで?誰かがメールとして何か変わったものを入力している場合は、それを受け入れてください-彼らはあなたよりもよく知っている可能性があります。
Mark Amery

7
実は、彼らが間違いを犯しているのは「チャンス」だと思います。非常に珍しいメールアドレスを持っている可能性がありますが、検証に合格せずにプロンプ​​トを表示すると、ほとんどの場合、間違ったアドレスの代わりに正しいメールアドレスを取得することになります。チェックするユーザー。
ジェフケンドール

1
:これは、文字列の先頭から照合を開始し、また、アッパーケースを受け入れる必要があり表す、^持つべきである^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+$
Kohjahブリーズ

13

RFC 822、第6章では、拡張バッカスナウア記法(BNF)のアドレスの指定を与えます。

addr-spec   =  local-part "@" domain
local-part  =  word *("." word)
domain      =  sub-domain *("." sub-domain)

この指定の使用a@bは有効なアドレスです。

更新

Trejkazのコメントに答えるために、次の定義を追加します。スペースは使用できますが、引用符で囲まれた文字列でのみ使用できます。

word          =  atom / quoted-string
atom          =  1*<any CHAR except specials, SPACE and CTLs>
quoted-string = <"> *(qtext/quoted-pair) <">
SPACE         =  <ASCII SP, space>
CTL           =  <any ASCII control character and DEL> 
qtext         =  <any CHAR excepting <">, "\" & CR, and including linear-white-space>
quoted-pair   =  "\" CHAR  

OTOH、RFC 822では、ローカル部分にスペースを配置することも許可されていますが、Chromeでは許可されていないようです。そのため、RFCを参照として使用するかどうかは不明です。(そうであるはずですが!)
Trejkaz

8

このMDNページでは、メールを検証するためにブラウザが使用する必要がある正規表現が示されています。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email#Validation

この正規表現を少し変更して、ドメイン名に少なくとも1つのドットを要求することができます。*正規表現の末尾にあるスターをプラスに変更し+ます。次に、その正規表現をpattern属性として使用します。

<input type="email" pattern="^[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])?)+$"></input>

3

電子メールフィールドのパターンをカスタマイズできます。

input:valid {
  border-color: green
}

input:invalid {
  border-color: red
}
Email:
<input type="email" required value="a@b.c" /><br>

Non-dots Email:
<input type="email" required pattern="[^.]+@[^.]+" value="a@b.c" />


2

これは、正規表現パターンを使用してhtml5でそれを行う方法です。表示するカスタムメッセージを含めることもできます。

<form>
  <input type="email" value="paul@test" required pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,63}$" title="Hey, you are missing domain part in the email !!!"/>
  <button type="submit">Click Me</button>
</form>


-5

このパターンは常に私にとってはうまくいきます。

テキストは小文字でなければなりませんが、 pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$"ほとんどのメールをカバーしていると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.