입력 날짜 형식이 올바른지 확인 필요(mmddyyyy)

입력 날짜 형식이 올바른지 확인 필요(mmddyyyy)

사용자가 입력한 날짜(mmddyyyy)를 확인하려고 합니다. 아래를 사용했지만 작동하지 않습니다. 실수를 수정하십시오.

 date  "+%m%d%Y" -d "02012019" > /dev/null  2>&1
        echo $?

답변1

그리고 zsh:

#! /bin/zsh -
date=${1?No date specified}

zmodload zsh/datetime || exit
if
  strftime -rs t %m%d%Y "$date" 2> /dev/null &&
  strftime -s canonical_date_for_t %m%d%Y "$t" 2> /dev/null &&
  [[ $date = $canonical_date_for_t ]]
then
  print -r -- $date is valid
else
  print -ru2 -- ${(q+)date} is invalid
  exit 1
fi

strftime -r구문 분석된 입력을 기반으로 호출됩니다 strptime(). 형식이 지정된 날짜로 다시 변환을 사용하지 않고.$date%m%d%Ystrftime-r%m%d%Ystrftime()

strptime()a를 수락 02292019하고 로 처리 03012019하지만 일단 다시 캐스팅되면 거부 strftime()됩니다 03012019. 마찬가지로 12310001(0001-12-31)은 예상대로 거부됩니다 12311( %Y1년차 AC의 경우 대신 1; 0001원하는 경우 %Y다음으로 대체).%4Ystrftime0001예상되는연도 표시 1).

답변2

내가 올바르게 이해했다면 이것이 가능한 접근 방식 중 하나입니다.

#!/bin/bash

d="$1"

[[ ! "$d" =~ ^[0-9]{8}$ ]] && \
  echo "Illegal number of characters, or not numbers." && \
  exit

d="${d:4}${d:2:2}${d:0:2}"

date  "+%m%d%Y" -d"$d" > /dev/null 2>&1

[ $? -ne 0 ] && echo "Invalid date." || echo "Valid date."

$ ./xx.sh 0201201x
Illegal number of characters, or not numbers.
$ ./xx.sh 0201201900000
Illegal number of characters, or not numbers.
$ ./xx.sh 32022019
Invalid date
$ ./xx.sh 02022019
Valid date.

이제 01022019유효한 날짜가 되지만 사용자가 날짜를 먼저 입력한 다음 월을 입력하면 특정 요구 사항에 맞는 또 다른 유효성 검사 세트가 필요합니다.

관련 정보