【问题标题】:user input date format verification in bashbash中的用户输入日期格式验证
【发布时间】:2013-09-15 22:26:06
【问题描述】:

所以我试图在 bash 中编写一个简单的脚本,要求用户输入日期 以下格式 (YYYY-dd-mm)。不幸的是,我卡在了第一步,即验证输入的格式是否正确。我尝试使用“日期”但没有运气(因为它返回实际的当前日期)。我试图让这个尽可能简单。感谢您的帮助!

【问题讨论】:

    标签: bash validation date


    【解决方案1】:

    使用正则表达式:

    if [[ $date =~ ^[0-9]{4}-[0-3][0-9]-[0-1][0-9]$ ]]; then
    

    或使用 bash glob:

    if [[ $date == [0-9][0-9][0-9][0-9]-[0-3][0-9]-[0-1][0-9] ]]; then
    

    请注意,此正则表达式将接受像 9999-00-19 这样的日期,这不是正确的日期。因此,在您使用此正则表达式检查其可能的正确性后,您应该验证数字是否正确。

    IFS='-' read -r year day month <<< "$date"
    

    这会将数字放入 $year $day$month 变量中。

    【讨论】:

    • 完美,它完全符合预期!谢谢!
    【解决方案2】:
    date -d "$date" +%Y-%m-%d 
    

    后者是格式,-d 允许输入日期。如果它是错误的,它将返回一个可以通过管道传送到位桶的错误,如果它是正确的,它将返回日期。

    格式修饰符可以在日期man 1 date 的联机帮助页中找到。这是一个包含 3 个日期的数组的示例:

    dates=(2012-01-34 2014-01-01 2015-12-24)
    
    for Date in ${dates[@]} ; do
        if [ -z "$(date -d $Date 2>/dev/null)" ; then
           echo "Date $Date is invalid"
        else
           echo "Date $Date is valid"
        fi
    done
    

    请注意:在工作时在 Google 中输入 man date 会产生一些 NSFW 结果;)

    【讨论】:

      猜你喜欢
      • 2018-06-11
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多