我需要进行ha有效性测试,以查看用户的输入是否有效。我需要知道用户是否写了有效的十六进制颜色。
输入可能是“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
答案 0 :(得分:4)
而不是[0-9]
,使用[0-9A-F]
(仅允许大写)或[0-9A-Fa-f]
(也允许使用小写)。例如:
if ! [[ $ANSI3 =~ ^[0-9A-F]{6}$ ]] ; then
# abort . . .
fi
答案 1 :(得分: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]
(处理大小写的情况)。
答案 2 :(得分:1)
十六进制数字可以是数字或A-F。
您只需要[0-9A-Fa-f]
。