【问题标题】:How to check if a variable is a valid hex color in bash如何检查变量是否是bash中的有效十六进制颜色
【发布时间】:2023-03-11 13:57:02
【问题描述】:

我需要进行有效性测试以查看用户的输入是否有效。我需要知道用户是否写了一个有效的十六进制颜色。

输入可能是“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

【问题讨论】:

    标签: bash colors hex


    【解决方案1】:

    在 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 到 6 个十六进制数字(F00000F 相同)”:这不是真的。 CSS 需要三个十六进制数字或六个(#ABC#AABBCC 相同)。 (我的意思是,听到浏览器支持您所描述的内容,我不会感到惊讶,但这并不是通常意义上的“有效”。)
    • @ruakh:谢谢。我坐得更正,并相应地修改了我的答案。
    【解决方案2】:

    使用[0-9A-F](仅允许大写)或[0-9A-Fa-f](也允许小写)代替[0-9]。例如:

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

    【讨论】:

      【解决方案3】:

      十六进制数字可以是数字或A-F。

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

      【讨论】:

        猜你喜欢
        • 2011-12-23
        • 2017-04-02
        • 1970-01-01
        • 2011-11-28
        • 1970-01-01
        • 2014-11-14
        • 2018-01-05
        • 2012-02-22
        • 1970-01-01
        相关资源
        最近更新 更多