メールアドレスの検証
7185 ワード
エーrecent issue Eyayili Githubリポジトリでは、メールアドレスの検証についてもう少し考えさせていただきました.私はそれを見始めたとき、私はそれがそのような複雑な問題であることを学ぶことに少し驚きました.誰が電子メールアドレスとして明らかに単純なような何かがそのような複雑さとリンクされる可能性があると思いましたか?
2つの問題があります.
{emayili}
.library(emayili)
仕事ですか。
If you want to validate an email address, send it an email. Problem solved.There’s only ONE way to validate an email address
この質問に答える最も効果的な手段はテストメッセージをアドレスに送り、潜在的に応答を要求することです.いくつかの可能な結果があります.
それは構文的に正しいですか?
驚くべきことではないが、どのような構文的に正しいメールアドレスを構成するかを規定する規則がある.ルールを考える前に、メールアドレスの部分について話しましょう.
電子メールアドレスは2つの部分から成ります:ローカル部分とドメイン.例えば、
[email protected]
. オプションのディスプレイ名は電子メールアドレスの前にあるかもしれません.その場合、電子メールアドレスは角括弧で囲まれます.例えば、Alice Jones <[email protected]>
.があるvarious rules これはローカル部分とドメインに適用されます.注:これは高レベルの要約であり、いくつかのニュアンスを無視します.
規則:地方
メールアドレスのローカル部分のルール
"alice"
) または引用符alice
). a
to z
and A
to Z
) 0
to 9
) .
) しかし、開始または終了または1つ以上の連続しない.ルール:ドメイン
メールアドレスのドメインのルール
アドレスクラス
安
address
クラスが追加されましたemayili
.alice <- address("[email protected]")
(bob <- address(email = "[email protected]", display = "Robert Brown"))
[1] "Robert Brown <[email protected]>"
構築することができますaddress
ローカル名とドメインからのオブジェクト.address(local = "alice", domain = "example.com")
[1] "[email protected]"
これはvectorisedとリサイクルを行うので、このようなこともできます.address(local = c("bob", "erin"), domain = "yahoo.co.uk")
[1] "[email protected]" "[email protected]"
これもパイプラインでうまく動作します.まず始めましょうtibble
いくつかのメールアカウントの詳細.recipients <- tibble(
email = c(NA, NA, NA, "[email protected]"),
local = c("alice", "erin", "bob", NA),
domain = c("example.com", "yahoo.co.uk", "yahoo.co.uk", NA),
display = c(NA, NA, "Robert Brown", NA)
)
recipients
# A tibble: 4 × 4
email local domain display
<chr> <chr> <chr> <chr>
1 <NA> alice example.com <NA>
2 <NA> erin yahoo.co.uk <NA>
3 <NA> bob yahoo.co.uk Robert Brown
4 [email protected] <NA> <NA> <NA>
今すぐ使用invoke()
呼ぶaddress()
レコードごとに.library(purrr)
recipients <- recipients %>%
invoke(address, .)
[1] "[email protected]" "[email protected]"
[3] "Robert Brown <[email protected]>" "[email protected]"
💡 これは、do.call()
.電子メールアドレスも強制的に
address
オブジェクト使用as.address()
.as.address("Robert <[email protected]>")
[1] "Robert <[email protected]>"
方法
電子メールアドレスと表示名を抽出する方法があります.
raw(bob)
[1] "[email protected]"
display(bob)
[1] "Robert Brown"
また、ローカルの部分とドメインを取得することができます.local(bob)
[1] "bob"
domain(bob)
[1] "yahoo.co.uk"
政党
新しい機能もあります.
parties()
, メールに関連するアドレスを抽出するために.email <- envelope() %>%
from("[email protected]") %>%
to("[email protected]", "Robert <[email protected]>") %>%
cc("[email protected]") %>%
bcc("[email protected]")
parties(email)
# A tibble: 5 × 6
type address display raw local domain
<chr> <vctrs_dd> <chr> <chr> <chr> <chr>
1 From [email protected] <NA> [email protected] alice example.com
2 To [email protected] <NA> [email protected] erin yahoo.co.uk
3 To Robert <[email protected]> Robert [email protected] bob yahoo.co.uk
4 Cc [email protected] <NA> [email protected] oscar windmill.nl
5 Bcc [email protected] <NA> [email protected] olivia hotmail.com
メールのすべてのアドレスの詳細は、素敵なけちな形式で分解.正規化
時にはメールアドレスのデータを汚すことができるので
address
クラスは内容をサニテーションする.as.address(" Robert < bob @ yahoo.co.uk >")
[1] "Robert <[email protected]>"
これは非常に簡単ですが、私はより多くの機能を追加する予定です.コンプライアンス
最後に、電子メールアドレスが構文規則に従うかどうかのテスト.
最初にいくつかの良いアドレス.
compliant(c(
"[email protected]",
"Robert <[email protected]>",
"[email protected]"
))
[1] TRUE TRUE TRUE
今いくつかの悪のアドレス.compliant(c(
"alice?example.com",
"Robert [email protected]",
"olivia@hot_mail.com"
))
[1] FALSE FALSE FALSE
の実装compliant()
正規表現を使用します.見るthis StackOverflow thread 電子メールをチェックするためのregexの使用に関する長い議論のために.それは完璧ではないが、それは機能的です.もし失敗した場合は、私に知らせてください、私はロジックを改善します.結論
ほとんどの場合、これらのチェックを心配する必要はありません.彼らはすべてのときに一緒にメールを入れバックグラウンドで発生します.しかし、あなたの電子メールアドレスの1つが問題であるならば、あなたが電子メールを送る前に、あなたは少なくともそれについて知っていなければなりません.
これらのアップデートは
{emayili}
-0.4.16 .Reference
この問題について(メールアドレスの検証), 我々は、より多くの情報をここで見つけました https://dev.to/datawookie/emayili-rudimentary-email-address-validation-cn7テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol