2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RFC emaillバリデーション

Last updated at Posted at 2020-08-14
 #不備メアド  理由     
 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]/

作成URL regulex

だけど実際/は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
こんどこそわかる(肯|否)定(先|後)読み
直後に~がある文字列、直後に~がない文字列、にパターンマッチさせる正規表現

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?