Module: PrivacyMaskTools::EmailMatcher

Included in:
Base
Defined in:
lib/privacy_mask_tools/email_matcher.rb

Overview

Email判定用モジュール

Instance Method Summary collapse

Instance Method Details

#domain_regexpString

メールアドレスのドメイン部の正規表現文字列

このままだと文字列ですので、Regexp.new等で正規表現に変換する必要があります

Returns:

  • (String)

    正規表現文字列



71
72
73
# File 'lib/privacy_mask_tools/email_matcher.rb', line 71

def domain_regexp
  "((\w+\-+[^_])|(\w+\.[-a-z0-9]*))*([-a-z0-9\.]{1,63})\.[a-z]{2,6}(?:\.[a-z]{2,6})?"
end

#has_rfc_email?(text) ⇒ Boolean

RFC5322形式に近いメールアドレスが存在するかチェックします

Parameters:

  • 探索対象文字列 (String)

Returns:

  • (Boolean)


9
10
11
# File 'lib/privacy_mask_tools/email_matcher.rb', line 9

def has_rfc_email?(text)
  !text.match(make_rfc_regexp).nil?
end

#make_rfc_regexpObject

RFC5322 に対応した正規表現を生成します

概ね対応しているレベルであり、完全に対応しているわけではありません

validates_email_format_ofを参考にしています TODO chache



38
39
40
# File 'lib/privacy_mask_tools/email_matcher.rb', line 38

def make_rfc_regexp
  Regexp.new('(('+ unquoted_regexp + '|' + quoted_regexp + '+)@(' + domain_regexp + '))')
end

#pick_rfc_email(text) ⇒ Array

RFC5322形式に近いメールアドレスを抽出します

Parameters:

  • 探索対象文字列 (String)

Returns:

  • (Array)


16
17
18
19
20
# File 'lib/privacy_mask_tools/email_matcher.rb', line 16

def pick_rfc_email(text)
  [].tap { |o|
    text.scan(make_rfc_regexp) { |f| o << f[0] }
  }
end

#quoted_regexpString

メールアドレスのローカル部において ダブルクウォーテーションで囲まれている部分の正規表現文字列

このままだと文字列ですので、Regexp.new等で正規表現に変換する必要があります

Returns:

  • (String)

    正規表現文字列



64
65
66
# File 'lib/privacy_mask_tools/email_matcher.rb', line 64

def quoted_regexp
  "\"[0-9A-Za-z#{special_char}#{quoted_special_char}\.]*\""
end

#quoted_special_charString

メールアドレスのローカル部のダブルクウォーテーションで囲まれた部分で使用可能な特殊記号

Returns:

  • (String)

    エスケープ処理された特殊記号



50
51
52
# File 'lib/privacy_mask_tools/email_matcher.rb', line 50

def quoted_special_char
  Regexp.escape('()<>[]:;@, ')
end

#rfc_email_masking(text, words = "***") ⇒ String

RFC5322形式に近いメールアドレスをマスキングします

Parameters:

  • 探索対象文字列 (String)
  • 置換文字列 (String)

Returns:

  • (String)

    置換後の文字列



26
27
28
# File 'lib/privacy_mask_tools/email_matcher.rb', line 26

def rfc_email_masking(text, words="***")
  text.dup.tap {|o| text.scan(make_rfc_regexp) { |f| o.sub!(f[0], words) } }
end

#special_charString

メールアドレスのローカル部で使用可能な特殊記号

Returns:

  • (String)

    エスケープ処理された特殊記号



44
45
46
# File 'lib/privacy_mask_tools/email_matcher.rb', line 44

def special_char
  Regexp.escape('!#$%&\'*-/=?+-^_`{|}~')
end

#unquoted_regexpString

メールアドレスのローカル部の正規表現文字列

このままだと文字列ですので、Regexp.new等で正規表現に変換する必要があります

Returns:

  • (String)

    正規表現文字列



57
58
59
# File 'lib/privacy_mask_tools/email_matcher.rb', line 57

def unquoted_regexp
  "([[0-9A-Za-z]#{special_char}]+[\.]+)*[[0-9A-Za-z]#{special_char}+]+"
end