二足のわらじ

〜プログラミングとSEOの勉強をはじめたミーハー26歳のメモ帳〜

【学習40日】正規表現の実践【応用3日】

正規表現とは?

→パスワード入力の際に「電話番号はハイフンを抜いてください」「半角英数字で入力してください」などのように制限をかけられるもの。

 

 

正規表現の3つのパターンを実践!

①電話番号のハイフンを抜く

グローバルマッチのg (ガッツのGではない)

 

irb(main):002:0> tel.sub(/-/,'')
=> "0901234-5678"
# 最初のハイフンしか置換されない

irb(main):003:0> tel.gsub(/-/,'')
=> "09012345678"

普通のsubの場合:

1つ目のハイフンしか置換できない

gsubの場合:

全てのハイフンを置換できる

 

 

②パスワードは8文字以上
irb(main):001:0> pass = 'Hoge1234'
=> "Hoge1234"

irb(main):002:0> pass.match(/[a-z\d]{8,}/i)
=> #<MatchData "Hoge1234">

 

f:id:vamnasocana:20191002205200p:plain

f:id:vamnasocana:20191002205231p:plain

f:id:vamnasocana:20191002205309p:plain

a-zのアルファベットか、数字であればマッチ

a-zのアルファベットか、数字が少なくともn字・多くともm字あればマッチ

(なお大文字小文字は無視する)

 

※マッチするとは※

条件を満たしマッチした値を

matchメソッドの返り値として返す。

(その返り値は配列形式に入れられて返される)

 

実際には「返り値が正しければ」という意味で、IFの条件式に組み込む。

pass = 'Hoge1234'
if pass.match(/[a-z\d]{8,}/i)
  //パスワード設定の処理
else
   puts 'パスワードの形式が間違っています。'
end

 

 

③アドレスからドメインのみを抽出
irb(main):001:0> mail = 'hoge@tech-camp.com'
=> "hoge@tech-camp.com"

irb(main):002:0> mail.match(/@.+/)
=> #<MatchData "@tech-camp.com">

 

パターン 意味
[a-z] 角括弧で囲まれた文字のいずれか 1 個にマッチ
\d 数字にマッチ
{n, m} 直前の文字が少なくとも n 回、多くても m 回出現するものにマッチ
. どの1 文字にもマッチ
+ 直前の文字の 1 回以上の繰り返しにマッチ