Module: PrivacyMaskTools::PhoneMatcher

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

Overview

電話番号判定用モジュール

Constant Summary collapse

MOBILE_NUMBER_REGEXP =

携帯番号 ソフト判定用正規表現

/([((]?([00][7-97-9][00])[-ー()()・  ]*([0-90-9]{4})[-ー()()・  ]*([0-90-9]{4})(?![0-90-9]))/
JARGON_MOBILE_NUMBER_REGEXP =

携帯番号 ハード判定用正規表現

/([((]?([00oO〇十]?[7-97-9⑦-⑨七-九][00oO〇十])[-ー()()・  ]*([0-90-9oO①-⑨一-四〇壱弐参]{4})[-ー()()・  ]*([0-90-9oO①-⑨一-四〇壱弐参]{4})(?![0-90-9]))/
PHONE_NUMBER_REGEXP =

固定電話(IP電話込) ソフト判定用正規表現

/([((]?(([00][334466])[-ー()()・  ]*([0-90-9]{4})|([00][1-91-9]{2})[-ー()()・  ]*([0-90-9]{3})|([00][1-91-9]{2}[0-90-9])[-ー()()・  ]*([0-90-9]{2})|([00][1-91-9]{2}[0-90-9]{2})[-ー()()・  ]*([0-90-9])|([00][55][00])[-ー()()・  ]*([0-90-9]{4}))[-ー()()・  ]*([0-90-9]{4})(?![0-90-9]))/
JARGON_PHONE_NUMBER_REGEXP =

固定電話(IP電話込) ハード判定用正規表現

/([((]?(([00oO〇十][33三参③44四④66六⑥])[-ー()()・  ]*([0-90-9oO①-⑨一-四〇壱弐参]{4})|([00oO〇十][1-91-9一-九四①-⑨壱弐参]{2})[-ー()()・  ]*([0-90-9oO①-⑨一-四〇壱弐参]{3})|([00oO〇十][1-91-9一-九四①-⑨壱弐参]{2}[0-90-9oO①-⑨一-四〇壱弐参])[-ー()()・  ]*([0-90-9oO①-⑨一-四〇壱弐参]{2})|([00oO〇十][1-91-9一-九四①-⑨壱弐参]{2}[0-90-9oO①-⑨一-四〇壱弐参]{2})[-ー()()・  ]*([0-90-9oO①-⑨一-四〇壱弐参])|([00oO〇十][55五⑤][00oO〇十])[-ー()()・  ]*([0-90-9oO①-⑨一-四〇壱弐参]{4}))[-ー()()・  ]*([0-90-9oO①-⑨一-四〇壱弐参]{4})(?![0-90-9]))/

Instance Method Summary collapse

Instance Method Details

#has_jargon_mobile_number?(text) ⇒ Boolean

携帯番号が含まれているかチェックします

隠語らしきもの(漢数字・丸付き数字・〇など)も判定します
そのため正常な文字列も置換する確率が高くなります
現時点ではテストが不十分です

Parameters:

  • チェック対象の文字列 (String)

Returns:

  • (Boolean)

    含まれている場合 true 含まれていない場合 false



41
42
43
# File 'lib/privacy_mask_tools/phone_matcher.rb', line 41

def has_jargon_mobile_number?(text)
  has_mobile_number?(text,true)
end

#has_jargon_phone_number?(text) ⇒ Boolean

固定電話番号が含まれているかチェックします

基本的な仕様はhas_jargon_mobile_number?と同一です

Parameters:

  • チェック対象の文字列 (String)

Returns:

  • (Boolean)

    含まれている場合 true 含まれていない場合 false



65
66
67
# File 'lib/privacy_mask_tools/phone_matcher.rb', line 65

def has_jargon_phone_number?(text)
  has_phone_number?(text, true)
end

#has_mobile_number?(text, jargon = false) ⇒ Boolean

携帯番号が含まれているかチェックします

jargonをfalseにした場合は判定条件はゆるめです
そのため、漢数字や丸数字はパスしてしまいます
ただし、セパレータ部分は強めの制限となっており、スペースも許容しています
そのため"000     9999  9999"もマッチします

Parameters:

  • チェック対象の文字列 (String)
  • 隠語判定強化フラグ(漢数字・丸付き数値にもマッチ) (Boolean)

Returns:

  • (Boolean)

    含まれている場合 true 含まれていない場合 false



28
29
30
31
# File 'lib/privacy_mask_tools/phone_matcher.rb', line 28

def has_mobile_number?(text, jargon=false)
  reg = jargon ? JARGON_MOBILE_NUMBER_REGEXP : MOBILE_NUMBER_REGEXP
  !text.match(reg).nil?
end

#has_phone_number?(text, jargon = false) ⇒ Boolean

固定電話番号が含まれているかチェックします

基本的な仕様はhas_mobile_number?と同一です

Parameters:

  • チェック対象の文字列 (String)
  • (Boolean)

Returns:

  • (Boolean)

    含まれている場合 true 含まれていない場合 false



53
54
55
56
# File 'lib/privacy_mask_tools/phone_matcher.rb', line 53

def has_phone_number?(text, jargon=false)
  reg = jargon ? JARGON_PHONE_NUMBER_REGEXP : PHONE_NUMBER_REGEXP
  !text.match(reg).nil?
end

#mobile_number_masking(text, word = "*", jargon = false) ⇒ String

携帯番号らしき箇所をマスキングします

wordに2文字以上を与えるとマッチした部分をその2文字で置き換えます
wordが1文字だとマッチした部分それぞれの数値をその文字で置き換えます

Examples:

mobile_number_masking("携帯番号 : 080-7900-5678"
# => "携帯番号 : xxx-xxxx-xxxx"
mobile_number_masking("携帯番号 : 080-7900-5678", "[Tel No]")
# => "携帯番号 : [Tel No]"

Parameters:

  • マスキング対象の文字列 (String)
  • マッチした部分の置換文字 (String)
  • 隠語判定を強化フラグ (Boolean)

Returns:

  • (String)

    マスキング後の文字列



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/privacy_mask_tools/phone_matcher.rb', line 81

def mobile_number_masking(text, word="*", jargon=false)
  reg = jargon ? JARGON_MOBILE_NUMBER_REGEXP : MOBILE_NUMBER_REGEXP
  text.scan(reg).each do |f|
    if word.size >= 2
      text = text.sub(f[0], word)
    else
      replace_word = f[0].dup
      f.each_with_index do |g, index|
        next if index == 0
        replace_word.sub!(g, word*g.size)
      end
      text = text.sub(f[0], replace_word)
    end
  end
  text
end

#phone_nomber_masking(text, word = "*", jargon = false) ⇒ String

固定電話らしき箇所をマスキングします

基本的な仕様はmobile_number_maskingと同一です

Parameters:

  • マスキング対象の文字列 (String)
  • マッチした部分の置換文字 (String)
  • 隠語判定を強化フラグ (Boolean)

Returns:

  • (String)

    マスキング後の文字列

See Also:



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/privacy_mask_tools/phone_matcher.rb', line 106

def phone_nomber_masking(text, word="*", jargon=false)
  reg = jargon ? JARGON_PHONE_NUMBER_REGEXP : PHONE_NUMBER_REGEXP
  text.scan(reg).each do |f|
    if word.size >= 2
      text = text.sub(f[0], word)
    else
      replace_word = f[0].dup
      f.each_with_index do |g, index|
        next if index <= 1 or g.nil?
        replace_word.sub!(g, word*g.size)
      end
      text = text.sub(f[0], replace_word)
    end
  end
  text
end

#pick_mobile_number(text, jargon = false) ⇒ Array

text中に含まれる携帯番号を抽出します

Parameters:

  • 探索対象文字列 (String)
  • Jargonモードを利用するか (Boolean)

Returns:

  • (Array)


136
137
138
139
# File 'lib/privacy_mask_tools/phone_matcher.rb', line 136

def pick_mobile_number(text, jargon=false)
  reg = jargon ? JARGON_MOBILE_NUMBER_REGEXP : MOBILE_NUMBER_REGEXP
  [].tap { |o| text.scan(reg).each { |f| o << f[0] } }
end

#pick_phone_number(text, jargon = false) ⇒ Array

text中に含まれる固定電話番号を抽出します

Parameters:

  • 探索対象文字列 (String)
  • Jargonモードを利用するか (Boolean)

Returns:

  • (Array)


127
128
129
130
# File 'lib/privacy_mask_tools/phone_matcher.rb', line 127

def pick_phone_number(text, jargon=false)
  reg = jargon ? JARGON_PHONE_NUMBER_REGEXP : PHONE_NUMBER_REGEXP
  [].tap { |o| text.scan(reg).each { |f| o << f[0] } }
end