LoginSignup
7
7

More than 5 years have passed since last update.

RubyのRegexで真偽値を返したい。どこにマッチしたかなんて興味ない

Last updated at Posted at 2016-02-03

何がしたいか

例えば、

def validate_some_str(str)
  /\A[a-z]*\z/ =~ str
end

validate_some_str("doge")  #=> 0
validate_some_str("doge2")  #=> nil

これを

validate_some_str("doge")  #=> true
validate_some_str("doge2")  #=> false

こうしたい。

疑問

if validate_some_str("wow") って書いてる分には問題ないし特に困ることはないけど、
どうしてもtruefalseだけを返したいとき、正しい方法ってなんだろう
(データベースに値をつっこんでるときなど、0trueと認識されないコンテキストがあるときに役に立ちそうですね)

どうするか

解法その1
def validate_some_str(str)
  (/\A[a-z]*\z/ =~ str)? true : false
end

シンプルでとてもわかりやすい

解法その2
def validate_some_str(str)
  !!(/\A[a-z]*\z/ =~ str)
end

なんかかっこいい。Stack Overflowではこれをやっている人が多かった。俺も便乗して使ってました。

解法その3
def validate_some_str(str)
  /\A[a-z]*\z/ === str
end

探していたのはこれですわ。そういえばcase文で知らない間にいつも使ってました。これから使っていきます。

最後に注意

解法1,2はStringSymbol以外が与えられるとTypeErrorを吐きます。
解法3はまとめてfalseを返します。ちょっと挙動が違う。

7
7
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
7
7