質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

793閲覧

【Ruby】splitで分割した要素の、数字と文字列の区別の仕方

SPie

総合スコア11

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2019/06/19 14:57

前提・実現したいこと

paizaラーニングの練習問題「日付のフォーマット」を解いています。

・"YYYY/MM/DD"の形式の10文字からなる
・YYYYは4つの数字からなる
・MMは2つの数字からなり、"01"から"12"の12種類のいずれかである
・DDは2つの数字からなり、"01"から"31"の31種類のいずれかである

上の条件を満たす場合に「Yes」/そうでなければ「No」を出力します。

・入力されるのは半角英数字と"/"のみ
・入力される文字列は20文字以内

発生している問題・エラーメッセージ

「aaaa/bb/cc」と「2018/09/21」など、文字列の場合と数字の場合の区別ができない

該当のソースコード

Ruby

1#標準入力で文字列を取得 2s = gets 3#取得した文字列を”/”で文字列の要素に分割 4t = s.split("/") 5 6year = t[0] 7month =t[1] 8day = t[2] 9 10if t.count==3 && #”/”で区切られる要素数が3つの場合 11 year.length ==4 && month.length == 2 && day.length ==2 && #要素の文字数指定 12 year.to_i<=9999 && day.to_i <=12 && day.to_i <=31 #要素の最大値指定 13  #ここでabcdなどの文字列も数字に変換してしまっているので、もともとが数字なのか文字列なのか区別がつかない 14 puts "Yes" 15else 16 puts "No" 17end

試したこと

list = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
list.any?{|str| ymd.include?(str)}
元の文字列が一文字じゃないので、include?では検出できなかったです

補足情報(FW/ツールのバージョンなど)

使えそうなメソッドがあるか、そもそも考え方の方向性が間違っているのか、なにかヒントをいただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

正規表現を使えば一撃です。

ruby

1/\A[0-9]{4}/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])\z/.match?(gets.chomp)

投稿2019/06/19 15:03

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SPie

2019/06/19 15:13

ありがとうございます! 正規表現について、勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問