首页 > 解决方案 > 使用正则表达式简单验证五位邮政编码

问题描述

我正在编写一个程序,允许用户输入一个五位数的邮政编码来获取当地电影院的列表及其列表。我稍后会在程序中抓取信息以填充剧院和电影对象。最终,我会找到一种方法来保存所有这些数据。但此时在我的 CLI 文件中,我希望用户输入一个五位数的邮政编码或单词 exit。这是到目前为止的代码......

def program_input
  input = gets
  if input.chomp == "exit"
    puts "Enjoy your movie!"
  elsif input.chomp == #five digit zipcode validator
    sleep(0.5)
    print "Calculating"
    sleep(0.25)
    print "."
    sleep(0.25)
    print "."
    sleep(0.25)
    print "."
    zip_code = input.chomp
    scraper = Scraper.new(zip_code)
  end
end

我需要的是elsif声明行。我想使用regex或其他东西来验证输入是一个五位数的数字,比如邮政编码。我不想使用外部 gem,也不想针对所有五位数邮政编码的列表进行验证。

我考虑过验证该数字是否在 00001 到 99999 的范围内。或者查看邮政编码列表,找到数字最小的邮政编码和数字更高的邮政编码,并接受该范围内的所有数字,但是我意识到会有大量符合该逻辑的数字差距,而实际上并不是有效的邮政编码。

本质上,如果用户类型退出,我希望程序退出。在检查它是否为小写“退出”之前,我将在那里添加小写语句以将任何字母取消大写。但是,如果用户输入了一个有效的五位数邮政编码,我希望它继续执行该程序....就像将该邮政编码注入一个 URL,然后在构建剧院之前从该 URL 中获取程序所需的信息和电影对象并将该信息返回给用户。我没有显示那部分代码,因为当scraper在线传递一个 5 位数的 zip 时,它已经编写好并且可以工作了。

任何帮助将不胜感激。

标签: ruby

解决方案


我建议你在case statement这里使用 a ,因为它使用===确定匹配的方法。

response = gets.chomp

case response
when "exit"
  puts "Enjoy your movie!"
when /\A\d{5}\z/
  # process zip code given by response
else
  # ?
end

注意/\A\d{5}\z/ === "01234" #=> true。请参阅正则表达式#===。正则表达式为:“匹配字符串的开头 ( \A),后跟五位数字 ( \d{5}),然后是字符串的结尾 ( \z)。

when "exit"/\A[Ee]xit\z/例如,如果希望响应"Exit"具有与 相同的效果,则可以替换为"exit"


推荐阅读