#不備メアド 理由
h-1.k-4.@ @前の記号
zkl.106.302.@ @前の記号
gaboratory.u.s.a.@ @前の記号
k.t_0807_@ @前の記号 RFC違反ではない
rspone/fine@ 使用不可記号 RFC違反ではない
hiro.0308-_-@ @前の記号&記号の連続使用 RFC違反ではない
taeko.iwahashi.@ @前の記号
t_h_@ @前の記号 RFC違反ではない
t496y519k018...@ @前の記号&記号の連続使用
yu.ya.to.mi.@ @前の記号
akn-szn-sck-hdk...@ @前の記号&記号の連続使用 h-1.k-4.@
zkl.106.302.@
gaboratory.u.s.a.@
k.t_0807_@
rspone/fine@
hiro.0308-_-@
taeko.iwahashi.@
t_h_@
t496y519k018...@
yu.ya.to.mi.@
akn-szn-sck-hdk...@
なメアドにバリデーションを引っかからせたい
URI::MailTo::EMAIL_REGEXP
で定義されているところから、ダメな文字の/
を抜いて、@の前に記号が入らないように書きました
[4] pry(main)> URI::MailTo::EMAIL_REGEXP
=> /\A[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])?)*\z/
/\A[a-zA-Z0-9.!\#$%&'*+\/=?^_`{|}~-]{0,63}[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])?)*\z]/
だけど実際/
はRFC違反の記号じゃないみたい
ドットの連続が違反らしい
@ の前が、最大64文字
@ の後ろが、最大253文字
全部での最大が、最大254文字
ですね。
結局
なので結局どうなったかというと
バリデーションは
1, URI::MailTo::EMAIL_REGEXP
を使う
2, URI::MailTo::EMAIL_REGEXP
でチェックできてない、一文字目のドット、連続ドット、@直前のドット の3つを弾くように追加
追加バリデーションについて
value =~ /^[.]/ #一文字目のドット禁止
value =~ /\.{2,}/ #連続ドット禁止
value =~ /(?<=\.)@/ #@直前のドット禁止 #肯定後読み
こんなURLは全弾きされます
.??..@aa.com
Qiita でまとめてくれている人がいました。
RFC 5322 & 5321に沿ったメールアドレス(local-part)に使える文字まとめ
肯定後読み参考url
こんどこそわかる(肯|否)定(先|後)読み
直後に~がある文字列、直後に~がない文字列、にパターンマッチさせる正規表現