【问题标题】:Validate User Date Input in Ruby在 Ruby 中验证用户日期输入
【发布时间】:2018-06-28 00:02:24
【问题描述】:

我正在尝试在我的 ruby​​ 脚本中验证正确的日期输入。

当我运行脚本时,它只会询问日期两次,无论它是否正确。

谁能告诉我哪里出错了?

def get_date(prompt="What is the date of the last scan (YYYYMMDD)")
    new_regex = /\A[0-9]{4}[0-1][0-9][0-3][0-9]\z/
    print prompt
    gets.chomp
    if prompt != new_regex
        puts "Please enter the date in the correct format"
        print prompt
        gets.chomp
    end
end

【问题讨论】:

    标签: ruby regex validation


    【解决方案1】:

    实际上,您的代码正在尝试将提示的相似性与正则表达式模式进行比较。

    /\A[0-9]{4}[0-1][0-9][0-3][0-9]\z/ === /\A[0-9]{4}[0-1][0-9][0-3][0-9]\z/ 为真。

    您的输入也未被捕获,因此无法与正则表达式进行比较。

    def get_date(prompt="What is the date of the last scan")
      new_regex = /\A[0-9]{4}[0-1][0-9][0-3][0-9]\z/
      print prompt + " (YYYYMMDD)"
      input = gets.chomp
      unless (input =~ new_regex) == 0 
        puts "Please enter the date in the correct format"
        get_date(prompt)
      end
      input 
    end
    

    如果没有匹配,input =~ new_regex 将为 nil (false)。

    (ps Rubyists 喜欢两个空格)

    【讨论】:

    • Josh,我进行了更改,它确实修复了双重提示,但是现在它只是说明任何输入现在都是有效的,即使数据无效也不会出现第二个提示.
    • @Derek 哎呀我写得太快了。我已经通过编辑更正了它:)
    • 你是我的英雄,我一直在绞尽脑汁寻找一切来让它工作,我已经习惯了 Python,它的事情要简单得多,哈哈。无论哪种方式,我都在编写这个 Ruby 脚本时学到了很多东西。您能否偶然解释一下更改或将解释通过电子邮件发送给我,以免堵塞有效信息。
    • @Derek 最大的变化是您从未对输入进行任何操作——您将提示与 Reyes 进行比较,而不是输入。与那里的python没有区别......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    相关资源
    最近更新 更多