如何检查字符串是否包含多个特殊字符

时间:2014-10-31 16:17:25

标签: bash shell

我有这个

if [[ ! $newstring == *['!'@#\$%^\&*()_+]* ]]
then
    echo Error - Does not contain One Special Character - $newstring
    i=$((i+1))
fi

检查字符串中是否只有一个字符来自银行,我想检查它是否有多个字符?

最好的方法是什么?

4 个答案:

答案 0 :(得分:2)

添加第二个课程

if [[ "$newstring" != *['!'@#\$%^\&*\(\)_+]*['!'@#\$%^\&*\(\)_+]* ]]

或剥去其他任何东西并检查长度

t="${newstring//[^!@#\$%^\&*()_+]}"
if [ ${#t} -lt 2 ]

答案 1 :(得分:1)

我们可以使用tr来解决它。

$ string='Hello-World_12@$@#*&%)(!@#@#'

$ number=$(( $(tr -d '[[:alnum:]]' <<< "$string"|wc -m) - 1 ))

$ echo "We have $number of special characters"
$ 16

这应该简短快捷。

答案 2 :(得分:0)

#!/bin/bash

a='!*@%6789'; 
if [[ `echo $a | sed "s/\(.\)/\1\n/g"|grep -c "[[:punct:]]"` -gt 1 ]]; then echo shenzi; else echo koba; fi

答案 3 :(得分:0)

grep可用于提供匹配

grep -oP "^[^'\!'@#\$%^\&*()_+]*['\!'@#\$%^\&*()_+][^'\!'@#\$%^\&*()_+]+$"

测试

$ echo "#asdfasdf234" | grep -oP "^[^'\!'@#\$%^\&*()_+]*['\!'@#\$%^\&*()_+][^'\!'@#\$%^\&*()_+]+$"

将字符串匹配为

#asdfasdf234

$ echo "#asdf#asdf234" | grep -oP "^[^'\!'@#\$%^\&*()_+]*['\!'@#\$%^\&*()_+][^'\!'@#\$%^\&*()_+]+$"

与字符串

不匹配

if构造可以是

echo $newstring| grep -oP "^[^'\!'@#\$%^\&*()_+]*['\!'@#\$%^\&*()_+][^'\!'@#\$%^\&*()_+]+$"
if [[ $? -eq 0 ]] > /dev/null
then
    echo Error - Does not contain One Special Character - $newstring
    i=$((i+1))
fi

这里是正则表达式

^[^'\!'@#\$%^\&*()_+]*['\!'@#\$%^\&*()_+][^'\!'@#\$%^\&*()_+]+$

匹配具有特殊字符

的确切一次出现的所有字符串