Ruby 循环,直到用户以正确的格式输入他的生日

Ruby 循环,直到用户以正确的格式输入他的生日,ruby,Ruby,我要求用户遵守该格式(dd.mm.yyyy)。我想反复询问用户他的生日,直到他以正确的格式输入他的生日。在用户以正确的格式输入其生日之前,我将如何使用户输入问题循环?我可以为用户输入设置哪些条件 这是我正在写的小程序 puts "What is your birthday? (dd.mm.yyyy)" user_input = gets.chomp user_array = user_input.split(".") uyyyy = user_array[2] umm = user_array

我要求用户遵守该格式(
dd.mm.yyyy
)。我想反复询问用户他的生日,直到他以正确的格式输入他的生日。在用户以正确的格式输入其生日之前,我将如何使用户输入问题循环?我可以为用户输入设置哪些条件

这是我正在写的小程序

puts "What is your birthday? (dd.mm.yyyy)"
user_input = gets.chomp

user_array = user_input.split(".")
uyyyy = user_array[2]
umm = user_array[1]
udd = user_array[0]

y = Time.now.year
m = Time.now.month
d = Time.now.day

require 'Date'
a = Date.new(y.to_i, m.to_i, d.to_i) - Date.new(uyyyy.to_i, umm.to_i, udd.to_i,)
sec = (a * 24 * 60 * 60).to_i

if a < 0
  puts "You are born in the future!"
  puts "You will be born in #{a} days"
else
  puts "Your year is #{uyyyy}! Your month is #{umm}! Your day is #{udd}!"
  puts "Todays year is #{y}! Todays month is #{m}! Todays day is #{d}!"
  puts "You are #{a.to_int/365} years, #{m} month and #{d} days old"    
  puts "You are #{sec} seconds old!"
end
写上“你的生日是什么?(dd.mm.yyyy)”
用户输入=get.chomp
user\u数组=user\u input.split(“.”)
uyyy=用户\数组[2]
umm=用户_数组[1]
udd=用户_数组[0]
y=时间。现在。年
m=时间。现在。月份
d=时间、现在、一天
需要“日期”
a=日期.新(y.to_i,m.to_i,d.to_i)-日期.新(uyyy.to_i,um.to_i,udd.to_i,)
秒=(a*24*60*60)。至
如果a<0
写着“你出生在未来!”
写着“你将在{a}天内出生”
其他的
写上“你的年份是{uyyy}!你的月份是{umm}!你的日子是{udd}!”
把“今天的年是{y}!今天的月是{m}!今天的天是{d}!”
把“你是{a.to{u int/365}岁,{m}个月和{d}天大”
写上“你已经{sec}秒大了!”
结束
给您:

require 'date'
while true do
    print "Enter bithday:"
    date_string = gets.chomp
    begin   
        date = Date.strptime(date_string, "%d.%m.%Y")
        print "Your bithday: #{date}"
        break
    rescue 
        puts "You enter incorrect date"
    end
end

您可以使用一个简单的正则表达式<代码>/\d{2}\.\d{2}\.\d{4}/应该可以,我想。@SergioTulentsev如果你忘记了
\A
\z
。好的,谢谢,我会查一下“regex”来更好地理解和学习它。如果您对阅读或学习内容有任何其他建议,请告诉我。使用
循环执行
而不是
,而使用true执行
@SergioTulentsev更简单,但速度较慢。@sawa,我认为此脚本的速度不是很快important@sawa:性能差异与此无关。瓶颈是用户输入。好的,谢谢,我将查看“regex”以更好地理解和学习它。如果你对阅读或学习有任何其他建议,请告诉我。
require 'date'
while true do
    print "Enter bithday:"
    date_string = gets.chomp
    begin   
        date = Date.strptime(date_string, "%d.%m.%Y")
        print "Your bithday: #{date}"
        break
    rescue 
        puts "You enter incorrect date"
    end
end