0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby] 正規表現matchメソッドの応用①

Posted at

はじめに

今回はRubyで正規表現を利用するmatchメソッドの応用を紹介します。

パスワードの文字数に制約を設定する

matchメソッドでを使って、登録するパスワードに「英数字8文字以上かどうか」をチェックしてみます。大文字小文字はどちらも入力可能とします。
まずは例を見てみましょう。

ターミナル
irb(main):001:0> pass = 'Hoge1234'
=> "Hoge1234"

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

パスワードを7文字にするとどうなるでしょうか。

ターミナル
irb(main):001:0> pass = 'Hoge123'
=> "Hoge123"

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

nilが返ってきました。irbの002の記述で8文字以上かどうかが確かめられているのが分かります。
さて、わからないのはmatchの後ろの記述がどういう意味かですね。
一つずつみてみましょう。

先ほどの表現は下記の4つに分けられます。
それぞれに意味があります。

・[a-z]
・\d
・{n, m}
・i

[a-z]

各括弧[]の中文字のうちのどれか一つがマッチするかどうかを確認できます。ハイフンを使うことで範囲的に設定することもできます。[a-z]はアルファベットでaからzまでのどれかにマッチするかどうか、という意味です。

aからcまでの英数字の抽出をしている例を見てみましょう。

ターミナル
irb(main):001:0> 'dog'.match(/[a-c]/)
=> nil

dogにはa,b,cどれもマッチしていないのでnilが返ってきています。

/d

dというのは数字を表しています。これは特殊文字と言われるものの一つです。特殊文字を使うときは、直前に/を記述する決まりがあります。

先ほどの[a-z]と組み合わせて。**[a-z/d]**とすると、英数字の何か一つにマッチするかどうか確かめることができます。

/dを単体で使用する(数字だけを抽出する)例です↓

ターミナル
irb(main):001:0> 'I have 3 pens'.match(/\d/)
=> #<MatchData "3">

{n, m}

n, mに数字を入れて使います。直前の文字が少なくともn回、多くてもm回出現するものにマッチすることを確認します。
これを使えば文字数の制約をかけることができます。

[a-z/d]{,8}という記述は英数字のどれかが少なくとも8回出現するものにマッチという意味です。

数字が少なくとも4回、多くても6回出現するものを確認する例です↓

ターミナル
irb(main):001:0> '12345678'.match(/\d{4,6}/)
=> #<MatchData "123456">

irb(main):002:0> '123'.match(/\d{4,6}/)
=> nil

i

最後にオプションでiを加えることで、大文字と、小文字を区別せずに検索できます。ちなみに、もしiをつけなければ、[a-z]という記述は小文字なので、大文字にはマッチしません。

大文字と小文字の区別をしている例↓

ターミナル
irb(main):003:0> 'Cat'.match(/cat/)
=> nil

irb(main):004:0> 'Cat'.match(/cat/i)
=> #<MatchData "Cat">

最後に

これらの組み合わせでいろんな制約をかけられそうですね。
次回もmatchの応用で、メールアドレスからドメイン部分のみを抽出する方法を紹介します。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?