Bash

如果它是車牌的格式,我該如何測試?

  • April 9, 2021

我需要測試輸入是否具有車牌 (0000-XYZ) 的 fromat 和格式為 000-0000 的日本 ZIP

我假設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

(給定相同的命令行參數,輸出與上面相同。)

引用自:https://unix.stackexchange.com/questions/643626