Как проверить, является ли переменная допустимым шестнадцатеричным цветом в bash - PullRequest
0 голосов
/ 01 января 2012

У меня должен быть тест на достоверность, чтобы убедиться, что данные пользователя верны. Мне нужно знать, пишет ли пользователь правильный шестнадцатеричный цвет.

Ввод может быть "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 ]

4 голосов
/ 01 января 2012

Вместо [0-9] используйте либо [0-9A-F] (чтобы разрешить только верхний регистр), либо [0-9A-Fa-f] (чтобы разрешить также нижний регистр).Например:

if ! [[ $ANSI3 =~ ^[0-9A-F]{6}$ ]] ; then
    # abort . . .
fi
4 голосов
/ 01 января 2012

В CSS Допустимый цвет должен иметь 3 или 6 шестнадцатеричных цифр .Вы можете проверить это с помощью регулярного выражения:

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 голос
/ 01 января 2012

Шестнадцатеричные цифры могут быть числами или A-F.

Вам просто нужно [0-9A-Fa-f].

...