번호판 형식인지 어떻게 테스트하나요?

번호판 형식인지 어떻게 테스트하나요?

입력 내용이 번호판(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

관련 정보