目的
私は電子メールアドレスの最低限の検証をしようとしていますが、そうしないようにアドバイスするアドバイスがたくさん見られます。私がこれを行っている理由は、私が実装している仕様では、電子メール アドレスが次の形式である必要があるためです。
mailto:<uri-encoded local part>@<domain part>
私は単純に開始部分mailto:
と最終部分を分割し@
、「ローカル部分」がこれらの間にあると仮定したいと思います。「ローカル部分」が URI エンコードされていることを確認します。
これ以上のことはしたくありません。仕様では、ほとんどの場合、「ベスト エフォート」の検証を行うことができますが、URI エンコーディングとmailto:
プレフィックスについては非常に具体的です。
問題
私が読んだすべてのことから、分割は私に@
は危険に思えます。
Web と Stack Overflow の回答で多くの矛盾するアドバイスを見てきましたが、そのほとんどは「RFC を読んでください」と言っており、ドメイン部分は特定の文字、つまり1-9
a-z
A-Z
-.
他のいくつかの文字にしかできないと言っているものもあります。 、しかしこれ以上のものではありません。例えば:
ドメイン名に関するさまざまな RFC を読むと、「任意の CHAR」( dtext
)または「ASCII 33 から 90 までの任意の文字」( dtext
)が許可されていることがわかります。これは、@
記号が許可されていることを意味します。「コメント」は括弧(
)
で許可され、ASCII 42 から 91 までの文字を含むことができるため、これはさらに複雑になります@
。
RFC1035 は文字 + 数字 + ダッシュ + ピリオドの要件をサポートしているようですが、RFC5322の「ドメイン リテラル」構文ではより多くの文字が許可されているようです。
RFC を誤解していますか、それとも@
電子メール アドレスのドメイン部分に a を許可しない何かが欠けていますか? 「ドメイン リテラル」構文は、私が心配する必要がないものですか?