【学習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">
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 回以上の繰り返しにマッチ |