ruby - 使用正则表达式简单验证五位邮政编码
问题描述
我正在编写一个程序,允许用户输入一个五位数的邮政编码来获取当地电影院的列表及其列表。我稍后会在程序中抓取信息以填充剧院和电影对象。最终,我会找到一种方法来保存所有这些数据。但此时在我的 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 时,它已经编写好并且可以工作了。
任何帮助将不胜感激。
解决方案
我建议你在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"
。
推荐阅读
- java - 如何在 jpa 查询中加入具有多对多关系的两个实体
- css - CSS3 动画在 Firefox 中效果不佳(过渡不流畅)
- php - 在我的 WordPress 自定义插件“函数名称必须是字符串”中,我正在使用 $get_the_author_meta()
- java - 获取当前处理块的先前块值 - 弹簧批处理
- javascript - 如何解析无序列表
- 是兄弟姐妹
- flutter - 如何在颤动中显示/隐藏密码?
- java - 为什么javers快照表序列乘以100
- pandas - AWS Athena 错误解释时间戳列
- python - 更改 SQLALCHEMY_DATABASE_URI 以使用端口 3307
- python - 有没有办法编写只返回第 n 个元素的 css 选择器?