LoginSignup
0
0

More than 1 year has passed since last update.

フリーダイヤルのみ抽出する 正規表現

Posted at

はじめに

正規表現がわからんので自分用の解説に記述しておきます!

今回実行したいミッションは

  • 配列内にある電話番号のフリーダイヤル(0120)のみと一致する事!
  • 「0120」に続く部分は、3桁3桁のみを許容する事!
  • 「0120-xxx-xxx」または「0120(xxx)xxx」の記述のみ許容する事!
  • 取り出したフリーダイヤルを新たな配列に格納する事!
phone_numbers = ["0120-111-111", "080-1111-1111", "0120(111)111, "0120444444"

正規表現

↓今回実現したいミッションのうち3つを実行していく。

  • 配列内にある電話番号のフリーダイヤル(0120)のみと一致する事!
  • 「0120」に続く部分は、3桁3桁のみを許容する事!
  • 「0120-xxx-xxx」または「0120(xxx)xxx」の記述のみ許容する事!

用いた正規表現

正規表現 意味
\A 直後の文字が先頭にある文字列にマッチ
[ ] 角括弧で囲まれた文字のいずれか1個マッチ
\d 数字にマッチ
{ n,m } 直前の文字が少なくともn回、多くてもm回出現するものにマッチ
\z 直前の文字が末尾にある文字列にマッチ
ruby 雛形.rb
def extract_free_dial(numbers)
end

phone_numbers = ["0120-111-111", "080-1111-1111", "0120(111)111", "0120444444"]
  
puts extract_free_dial(phone_numbers)
フリーダイヤルの正規表現
(/\A0120[-(]\d{3}[-)]\d{3}\z/)
正規表現 意味
\A0120 直後の文字が0120の文字列とマッチ
[ -( ] 「 - 」または 「 ( 」の文字のいずれか1個とマッチ
\d 数字にマッチ
{ 3 } 直前の数字(\d)が3回の文字列とマッチ
[ - ) ] 「 - 」または 「 - ) 」の文字のいずれか1個とマッチ
\z 直前の文字(\d{3})つまり数字が3個並んだ文字列とマッチ
ruby 雛形.rb
def extract_free_dial(numbers)
    number.match(/\A0120[-(]\d{3}[-)]\d{3}\z/) != nil
end

phone_numbers = ["0120-111-111", "080-1111-1111", "0120(111)111", "0120444444"]
  
puts extract_free_dial(phone_numbers)
  • 配列内にある電話番号のフリーダイヤル(0120)のみと一致する事!
  • 「0120」に続く部分は、3桁3桁のみを許容する事!
  • 「0120-xxx-xxx」または「0120(xxx)xxx」の記述のみ許容する事!

↑以上の正規表現で今回したいミッションが3つ実行できた!

条件分岐

↓条件分岐で実行したいミッションは

  • 取り出したフリーダイヤルを新たな配列に格納する事!

① まずは新たに格納する配列を設定する。

free_dials = []

phone_number配列から要素を一つずつ取り出すのでeachメソッドを使用。

numbers.each do |number|
end

if文を用いて条件分岐していく

def extract_free_dial(numbers)
    free_dials = []
    i = 0
    numbers.each do |number|
      if number.match(/\A0120[-(]\d{3}[-)]\d{3}\z/) != nil
      free_dials << numbers[i]
      end
      i += 1
    end
    return free_dials
end

  phone_numbers = ["0120-111-111", "080-1111-1111", "0120(111)111", "0120444444"]

  puts extract_free_dial(phone_numbers)

さっき作成した正規表現を用いて
!= nil → nilでは無い条件に一致している if文を作成する。

if number.match(/\A0120[-(]\d{3}[-)]\d{3}\z/) != nil

当てはまる電話番号をfree_dialsの配列に格納する。

free_dials << numbers[i]

最後にreturn free_dialsでfree_dialsの値を戻り値として返す。

最後に

今回実行したいミッション

  • 配列内にある電話番号のフリーダイヤル(0120)のみと一致する事!
  • 「0120」に続く部分は、3桁3桁のみを許容する事!
  • 「0120-xxx-xxx」または「0120(xxx)xxx」の記述のみ許容する事!
  • 取り出したフリーダイヤルを新たな配列に格納する事!

以上で全ての実装できました!

かなり限定的な使用方法ですが備忘録に残すことで頭の中が整理できました!
まだまだ知識不足な部分が多いですが、日々精進して参ります/._./

0
0
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
0
0