はじめに
正規表現がわからんので自分用の解説に記述しておきます!
今回実行したいミッションは
- 配列内にある電話番号のフリーダイヤル(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」の記述のみ許容する事!
- 取り出したフリーダイヤルを新たな配列に格納する事!
以上で全ての実装できました!
かなり限定的な使用方法ですが備忘録に残すことで頭の中が整理できました!
まだまだ知識不足な部分が多いですが、日々精進して参ります/._./