![번호판 형식인지 어떻게 테스트하나요?](https://linux55.com/image/14216/%EB%B2%88%ED%98%B8%ED%8C%90%20%ED%98%95%EC%8B%9D%EC%9D%B8%EC%A7%80%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EB%82%98%EC%9A%94%3F.png)
입력 내용이 번호판(0000-XYZ) 형식이고 일본어 ZIP 형식이 000-0000인지 테스트해야 합니다.
답변1
귀하의 경우에는 "모든 단일 숫자", 즉 "세 개의 대문자로 구성된 문자열"을 0
의미한다고 가정합니다 . XYZ
다음 코드는 POSIX 로케일을 추가로 가정합니다.
#!/bin/sh
for string do
case $string in
([0-9][0-9][0-9][0-9]-[A-Z][A-Z][A-Z])
printf '"%s" looks like a number plate\n' "$string"
;;
([0-9][0-9][0-9]-[0-9][0-9][0-9][0-9])
printf '"%s" looks like a Zip-code\n' "$string"
;;
(*)
printf 'Cannot determine what "%s" is\n' "$string"
esac
done
와일드카드 패턴을 사용하여 주어진 각 문자열을 일치시키고 해당 유형을 결정하거나 해당 유형을 결정할 수 없는 경우. 이 문자열은 스크립트의 명령줄에 제공됩니다.
시험:
$ ./script 1234-ABC 234-2345 AAA-BB
"1234-ABC" looks like a number plate
"234-2345" looks like a Zip-code
Cannot determine what "AAA-BB" is
bash
대신 정규식을 사용하세요 .
#!/bin/bash
for string do
if [[ $string =~ ^[0-9]{4}-[A-Z]{3}$ ]]; then
printf '"%s" looks like a number plate\n' "$string"
elif [[ $string =~ ^[0-9]{3}-[0-9]{4}$ ]]; then
printf '"%s" looks like a Zip-code\n' "$string"
else
printf 'Cannot determine what "%s" is\n' "$string"
fi
done
(동일한 명령줄 매개변수를 사용하면 출력은 위와 동일합니다.)
답변2
나는 스크립트를 만들었습니다. 내가 당신을 올바르게 이해하길 바랍니다
#! /bin/bash
for plate do
[[ $plate =~ ^[0-9]{3}-[0-9]{4}$ ]] && echo "$plate : Japanese Plate" && continue
[[ $plate =~ ^[0-9]{4}-[A-Z]{3}$ ]] && echo "$plate : Normal Plate" && continue
echo "$plate : INVALID INPUT"
done
매우 간단하고 반복 가능합니다.
나는 코딩에 서툴러서 bash도 예외는 아니라고 말하고 싶습니다. 이것을 내 기술을 향상시키기 위한 도전으로 받아들입니다.
매우 작은 터미널 출력:
INPUT: bash testfindnew.sh 000-1234 0000-XYZ 000-00000 0000-XYZZ
OUTPUT: 000-1234 : Japanese Plate
0000-XYZ : Normal Plate
000-00000 : INVALID INPUT
0000-XYZZ : INVALID INPUT
답변3
Bash 스크립트에서 정규식을 사용할 수 있습니다. 예를 들어:
#!/bin/bash
car_plate="0000-0000"
if [[ $car_plate =~ ^[0-9-]+$ ]]; then
echo "standard"
elif [[ $car_plate =~ ^[0-9]+-[a-zA-Z]+$ ]]; then
echo "japanese"
fi