如何查找字符串是否包含任何特殊字符?

时间:2010-03-26 11:41:49

标签: c#

我想查找一个字符串是否包含任何特殊字符,如!,@,#,$,%,^,&,*,(,)....等。

如果不循环遍历字符串中的所有字符,我怎么能这样做呢?

11 个答案:

答案 0 :(得分:35)

使用String.IndexOfAny

private static readonly char[] SpecialChars = "!@#$%^&*()".ToCharArray();

...

int indexOf = text.IndexOfAny(SpecialChars);
if (indexOf == -1)
{
    // No special chars
}

当然会在内部循环 - 但至少你不必在你的代码中这样做。

答案 1 :(得分:12)

  Regex RgxUrl = new Regex("[^a-z0-9]");
                    blnContainsSpecialCharacters = RgxUrl.IsMatch(stringToCheck);

答案 2 :(得分:11)

通常最好检查字符串中的所有字符是否为“普通”字符,换句话说使用白名单而不是黑名单,而不是检查字符串是否包含“特殊字符”。原因是有很多字符可以被认为是“特殊字符”,如果你试图列出它们,你一定会错过一个。

因此,不要按照您的要求进行操作,而是检查您的字符串是否匹配正则表达式@"^\w+$"或者您需要的任何内容。

答案 3 :(得分:5)

Linq是新的黑人。

string.Any(c => char.IsSymbol(c));

对于IsSymbol(),有效符号是UnicodeCategory的成员。

  • 字母符号,包括一组数学字母数字符号以及符号,如℅,№和™
  • 数字表格,例如下标和上标
  • 数学运算符和箭头
  • 几何符号
  • 技术符号
  • 盲文模式
  • 装饰符号

修改

这不会捕获所有字符。这可能是补充:

string.Any(c => !char.IsLetterOrDigit(c));

答案 4 :(得分:3)

这是一个使用LINQ检查特殊字符的简短解决方案

private bool ContainsSpecialChars(string value)
{
        var list = new[] {"~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "+", "=", "\""};
        return list.Any(value.Contains);
}

答案 5 :(得分:1)

我试图取得不同的结果。要创建一个方法,该方法返回用于分隔确定字符串的特殊字符,例如1#4#5,然后使用它来拆分相同的字符串。 由于我维护的系统是由很多不同的人建造的,在某些情况下,我不知道哪种模式(通常没有),以下帮助了我很多。我还不能投票。

public String Separator(){
      **String specialCharacters = "%!@#$#^&*()?/>.<:;\\|}]{[_~`+=-" +"\"";**
      char[] specialCharactersArray = specialCharacters.toCharArray();
      char[] a = entrada.toCharArray();
      for(int i = 0; i<a.length; i++){
          for(int y=0; y < specialCharactersArray.length; i++){
              if(a[i] == specialCharactersArray[y]){
                  separator = String.valueOf(specialCharactersArray[y]);   
              }
          }
      }
      return separator;
    }

谢谢你们。

答案 6 :(得分:1)

//apart from regex we can also use this
string input = Console.ReadLine();
            char[] a = input.ToCharArray();
            char[] b = new char[a.Length];
            int count = 0;
            for (int i = 0; i < a.Length; i++)
            {
                if (!Char.IsLetterOrDigit(a[i]))
                {
                    b[count] = a[i];
                    count++;
                }
            }
            Array.Resize(ref b, count);
            foreach(var items in b)
            {
                Console.WriteLine(items);
            }
            Console.ReadLine();
//it will display the special characters in the string input

答案 7 :(得分:0)

public static bool HasSpecialCharacters(string str)
{
  string specialCharacters = @"%!@#$%^&*()?/>.<,:;'\|}]{[_~`+=-" +"\"";
  char[] specialCharactersArray = specialCharacters.ToCharArray();

  int index = str.IndexOfAny(specialCharactersArray);
  //index == -1 no special characters
  if (index == -1)
    return false;
  else
    return true;
}

答案 8 :(得分:-1)

使用PHP,您可以尝试:

if (preg_match("[^A-Za-z0-9]", $yourString) {
  //DO WHATEVER
}

如果字符串包含字母或数字以外的任何内容,则返回TRUE。

希望这有帮助。

答案 9 :(得分:-1)

也...

foreach (char character in "some*!@#@!#string")
        {
            if(!Char.IsLetterOrDigit(character))
            {
                //It is a special character.
            }
        }

答案 10 :(得分:-1)

def splchar(str):
splchar=("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "+", "=")
for chr in splchar:
    if (chr in str):
        print("not accepted")
        break
else:
        print("accepted")
str="GeeksForGeeks"

splchar(str)