2013-08-04 29 views
5

尝试验证字符串中只有小写,大写或数字。Bash需要测试字母数字字符串

if ! [[ "$TITLE" =~ ^[a-zA-Z0-9]+$ ]]; then echo "INVALID"; fi 

想法?

* UPDATE *

变量TITLE目前只有大写文字,所以应该通过并没有什么应该被输出。但是,如果我为TITLE添加一个特殊字符,则IF语句应该捕捉它并回应INVALID。目前它不起作用。它总是回声无效。我认为这是因为我的正则表达式是错误的。我想我写的方式,它寻找一个包含所有三个标题的标题。

猛砸4.2.25

的想法是,用户应该可以,只要它仅包含大写字母,小写字母或数字加任何头衔。所有其他角色都应该失败。

* UPDATE *

如果TITLE = ThisIsAValidTitle它回声无效。

如果TITLE = ThisIs @@@@@@@ InvalidTitle它也是回声无效。

*解*

奇怪的,以及它开始工作时,我简化它归结为这样:

TEST="Valid0" 
if ! [[ "$TEST" =~ [^a-zA-Z0-9] ]]; then 
    echo "VALID" 
else 
    echo "INVALID" 
fi 

*真正的解决方案*

我的变量有空间在它... DUH

对不起,这个家伙......

*最终的解决方案*

这标题

if ! [[ "$TITLE" =~ [^a-zA-Z0-9\ ] ]]; then 
    echo "VALID" 
else 
    echo "INVALID" 
fi 
+1

结果是什么?你在期待什么? –

+0

变量TITLE目前只有大写文本,所以它应该通过并且不应输出任何内容。但是,如果我为TITLE添加一个特殊字符,则IF语句应该捕捉它并回应INVALID。目前它不起作用。它总是回声无效。我认为这是因为我的正则表达式是错误的。我想我写的方式,它寻找一个包含所有三个标题的标题。 – Atomiklan

+0

似乎很适合我。你使用的是什么版本的bash? –

回答

11

我颠倒逻辑占空间。试验无效字符和回声警告如果至少一个存在:

if [[ "$TITLE" =~ [^a-zA-Z0-9] ]]; then 
    echo "INVALID" 
fi 

虽这么说,你原来的支票为我工作,所以你可能需要提供更多的内容(即你的脚本的较大部分) 。

+0

没有变化。如果TITLE = ThisIsAValidTitle,则回声无效。如果TITLE = ThisIs @@@@@@@ InvalidTitle它也是无效的。 – Atomiklan

+0

你在运行哪个shell(即脚本的shebang行是什么)? –

+0

我给你部分功劳,因为你确实帮助我改变了周围的语法。谢谢 – Atomiklan

0

提名的答案是错误的。因为它不检查字符串的末尾。也是倒过来的。作为条件说:“如果字符串的开始是有效字符,则回显无效”

[[ $TITLE =~ ^[a-zA-Z0-9_-]{3,20}$ ]] && ret="VALID" || ret="INVALID" 

echo $ret 
相关问题