2012-01-01 66 views
0

我需要進行有效性測試以查看來自用戶的輸入是否有效。我需要知道用戶是否寫入有效的十六進制顏色。如何檢查一個變量是否在bash中是一個有效的十六進制顏色

輸入可能是「FFTTAA」,由於TT不是十六進制,因此無效。然後它需要中止以便它不寫入文件。我的問題是,我不知道如何挑出十六進制,因爲它是字母和數字。這意味着一個簡單的[0-9]將不起作用。

read -p "Use light, normal or bold (ex. light): " ANS1; read -p "Write size in mm (ex. 1.8): " ANS2; read -p "Write color in hexadecimal (ex. FFFFFF): " ANS3; 

sed -i '/SwipeLauncherButtonStyle {/,/text/c\ 
    SwipeLauncherButtonStyle {\ 
    font: \$FONT_FAMILY '"$ANS1"' '"$ANS2"'mm;\ 
    text-color: \#'"$ANS3"';' file.css 

回答

3

而不是[0-9],使用[0-9A-F](只允許大寫)或[0-9A-Fa-f](以允許小寫)。例如:

if ! [[ $ANSI3 =~ ^[0-9A-F]{6}$ ]] ; then 
    # abort . . . 
fi 
+0

啊..多麼愚蠢。當然,我可以。謝謝! ;) – AlMehdi 2012-01-01 02:49:00

+0

@AlMehdi:不客氣! – ruakh 2012-01-01 02:54:12

+1

@downvoter:謹慎解釋? – ruakh 2012-01-01 02:54:48

1

十六進制數字可以是數字或A-F。

您只需要[0-9A-Fa-f]

4

在CSS中,A valid colour must have either 3 or 6 hexadecimal digits。您可以使用正則表達式檢查:

if [[ ${ANS3} =~ ^([[:xdigit:]]{3}){1,2}$ ]]; then 
    echo "Valid"; 
else 
    echo "Invalid"; 
fi 

^標誌着字符串的開頭,$結束標誌和{3}是指一個原子的比賽的三([[:xdigit:]])和{1,2}的一個或兩個實例先前的原子((...)),合併爲3或6.

POSIX [[:xdigit:]]相當於[A-Fa-f0-9](照顧大小寫)。

+1

Re:「有效的顏色必須有1到6個十六進制數字('F'與'00000F'相同)」:這是不正確的。 CSS需要三個十六進制數字或六個('#ABC'與'#AABBCC'相同)。 (我的意思是,聽到瀏覽器支持你描述的內容並不讓我感到驚訝,但通常意義上這不是「有效的」。) – ruakh 2012-01-01 02:57:28

+0

@ruakh:謝謝。我坐下糾正,並相應地修改了我的答案。 – Johnsyweb 2012-01-01 03:05:52

+1

感謝您的修復! +1 :-) – ruakh 2012-01-01 03:07:32

相關問題