尝试验证字符串中只包含小写,大写或数字。
if ! [[ "$TITLE" =~ ^[a-zA-Z0-9]+$ ]]; then echo "INVALID"; fi
思想?
*更新*
变量TITLE目前只有大写文本,因此它应该通过,不应输出任何内容。但是,如果我向TITLE添加一个特殊字符,IF语句应该捕获它并回显INVALID。目前它不起作用。它总是回声无效。我认为这是因为我的正则表达式是错误的。我认为我写它的方式,它寻找一个包含所有三个标题的标题。
Bash 4.2.25
这个想法是,用户应该能够添加任何标题,只要它只包含大写,小写或数字。所有其他角色都应该失败。
*更新*
如果TITLE = ThisIsAValidTitle,则回声无效。
如果TITLE = ThisIs @@@@@@@ InvalidTitle,它也无效。
*解决方案*
很奇怪,当我把它简化到这个时,它就开始工作了:
TEST="Valid0"
if ! [[ "$TEST" =~ [^a-zA-Z0-9] ]]; then
echo "VALID"
else
echo "INVALID"
fi
* REAL SOLUTION *
我的变量中有空格...... DUH
对不起麻烦的人......
*最终解决方案*
这说明了标题中的空格
if ! [[ "$TITLE" =~ [^a-zA-Z0-9\ ] ]]; then
echo "VALID"
else
echo "INVALID"
fi
答案 0 :(得分:12)
我会颠倒逻辑。测试无效字符并在至少存在一个警告时回显警告:
if [[ "$TITLE" =~ [^a-zA-Z0-9] ]]; then
echo "INVALID"
fi
话虽如此,您的原始支票对我有用,因此您可能需要提供更多上下文(即脚本的更大部分)。
答案 1 :(得分:0)
指定的答案是错误的。因为它不会检查字符串的结尾。它也被倒置了。如条件所示:"如果字符串的开头是有效字符,则echo无效"
[[ $TITLE =~ ^[a-zA-Z0-9_-]{3,20}$ ]] && ret="VALID" || ret="INVALID"
echo $ret
答案 2 :(得分:0)
为什么我们不能使用alnum
[[ 'mystring123' =~ [:alnum:] ]] && echo "ok" || echo "no"