我如何测试它是否是车牌的格式?

我如何测试它是否是车牌的格式?

我需要测试输入是否具有车牌(0000-XYZ)的格式以及格式为 000-0000 的日语 ZIP

答案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

相关内容