ナンバープレート形式であるかどうかをテストするには?

ナンバープレート形式であるかどうかをテストするには?

入力内容がナンバープレート(0000-XYZ)形式で、日本語ZIP形式が000-0000かどうかをテストする必要があります。

答え1

あなたの場合は、「すべての単一の数字」、つまり「3つの大文字の文字列」を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

関連情報