3

ユーザーが有効な MAC アドレス (つまり 0a:1b:2c:3d:4e:5f) のみを入力できるようにしようとしており、展開された形式よりも簡潔にしたいと考えています。

[[ $MAC_ADDRESS =~ [a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9]:[a-zA-Z0-9][a-zA-Z0-9] ]]

このようにする方法はありますか?

[[ $MAC_ADDRESS =~ ([a-zA-Z0-9]{2}:){5}[a-zA-Z0-9]{2} ]]

基本的に、2 つの英数字とそれに続くコロンで構成される「グループ」を作成し、それを 5 回繰り返します。考えられることはすべて試しましたが、このようなことが可能であると確信しています。

4

2 に答える 2

8

^andを使用して、$他に何もないことを確認することをお勧めします。

[[ "$MAC_ADDRESS" =~ ^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$ ]] && echo "valid" || echo "invalid"

編集: BASH版で正規表現を使用3.1するには、正規表現を引用する必要があるため、次のように動作するはずです:

[[ "$MAC_ADDRESS" =~ "^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$" ]] && echo "valid" || echo "invalid"
于 2013-11-13T16:52:08.897 に答える
2

あなたは実際、あなたの提案に非常に近いです。A から Z に進むのではなく、A から F に進みます。

^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$
于 2013-11-13T16:52:55.363 に答える