#正規表現入門
##match
matchは変数の中に特定の文字があるかどうかを判断してくれる。
name = 'tarou'
name.match(/t/)
=> #<MatchData "t">
このように//で囲った文字の有無を確認できる。
//の中の指定方法も様々で
name.match(/[a-z]/)
アルファベットのa~zにある文字が入っているのかどうかを確認できる。
ただし小文字のa~zのみの検出になるので
name.macth(/[a-z]/i)
とすると大文字、小文字の区別をなくせる。
[0-9]とすれば0~9の数字を検出できます。
webサービスよく使われているものとしては
e_mail_address = 'tarou@gmail.com'
e_mail_address.match(/@.+/)
=> #<MatchData "@gmail.com">
#'.'はどの文字列でも1文字マッチ、'+'は+の前にある文字列に1文字以上続きがあるかを指定。
これで入力されたメールアドレスにドメインがついているのかをチェックしたり。
pass = 'TaR0uyamaDa'
pass.match(/[a-z\d]{8,16}/i)
=>#<MatchData "TaR0uyamaDa">
# [a-z\d]はa~zのうちの一文字、{8,16}で8文字以上16文字以下の部分を検出する
↑注意事項:{n/i}のi文字以上の文字を入力しても、i文字以下の文字を検出するだけで、i文字以上の入力を制限するものではない。/\A[a-z\d]{8,16}\z/iすると8文字以上16文字以下と制限することができる。
\Aは文字列の先頭に\zは文字列の末尾を意味している。
##sub,gsub
subは指定した文字を1文字だけ置き換えることができる
str = 'abcaaa'
str.sub(/a/, 'x')
=>"xbcaaa"
#aが1文字だけxに置き換わっている。
lang = '日本語'
lang.sub(/日本/,'スワヒリ')
=>"スワヒリ語"
こんな使い方もできたり。
指定した文字を全て置き換えたい場合はgsubを用いる。
phone_num = '123-4567-8910'
phone_num.gsub(/-/,"")
=> "12345678910"
#"の中を空にすれば//の中の文字を消すこともできる。
電話番号の登録をしてもらう際に'-'があるパターンとそうでないパターン両方でDBに保存すると管理がしずらくなったりするのでそれを解消したりできる。