如何检查字符串是否包含特殊字符(!@#$%^& *()_ +)

时间:2014-10-29 02:14:36

标签: linux bash shell

我想知道检查字符串是否为

的最佳方法是什么
$str 

包含以下任何字符

!@#$%^&*()_+

我想过使用ASCII值,但是对于如何实现它有点困惑。

或者,如果有一种更简单的方法可以根据值检查字符串。

5 个答案:

答案 0 :(得分:20)

将它与glob匹配。你只需要逃避shell认为特殊的字符:

#!/bin/bash
str='some text with @ in it'
if [[ $str == *['!'@#\$%^\&*()_+]* ]]
then
  echo "It contains one of those"
fi

答案 1 :(得分:5)

这对Dash等人来说是可移植的。和恕我直言更优雅。

case $str in
  *['!'@#$%^&*()_+]* ) echo yup ;;
esac

答案 2 :(得分:0)

使用expr

str='some text with @ in it'
if [ `expr "$str" : ".*[!@#\$%^\&*()_+].*"` -gt 0 ];
    then 
       echo "This str contain sspecial symbol"; 
       fi

答案 3 :(得分:0)

我认为一种简单的做法就是删除任何字母数字字符和空格。

echo "$str" | grep -v "^[a-zA-Z0-9 ]*$"

如果您有一堆字符串,那么将它们放在像strFile这样的文件中,并且以下命令可以满足需要。

cat strFile | grep -v "^[a-zA-Z0-9 ]*$"

答案 4 :(得分:0)

您还可以使用正则表达式:

if [[ $str =~ ['!@#$%^&*()_+'] ]]; then
    echo yes
else
    echo no
fi

没有什么可以逃脱的,因为特殊字符位于单引号中; []的意思是“包含的字符串中的任何内容”;并且由于该模式中没有^$,因此它将与$str中的任何位置匹配。