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

Man*_*ish 22 c#

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

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

Jon*_*eet 35

用途String.IndexOfAny:

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

...

int indexOf = text.IndexOfAny(SpecialChars);
if (indexOf == -1)
{
    // No special chars
}
Run Code Online (Sandbox Code Playgroud)

当然,这将在内部循环 - 但至少你不必在你的代码中执行它.


Fiv*_*ols 12

  Regex RgxUrl = new Regex("[^a-z0-9]");
                    blnContainsSpecialCharacters = RgxUrl.IsMatch(stringToCheck);
Run Code Online (Sandbox Code Playgroud)

  • 这将接受“à”,这是OP的特殊字符吗?(当然不是,OP已经接受了答案) (2认同)

Mar*_*ers 11

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

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

  • @Bubblewrap:我建议使用正则表达式和白名单.这不是问题的有效答案吗?黑名单方法的问题在于他写'etc ...'的位置.计算机无法猜出你的意思,编写所有特殊字符的列表是恕我直言,这是解决这个问题的错误方法. (3认同)

Mik*_* B. 6

Linq是新的黑人.

string.Any(c => char.IsSymbol(c));
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

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

string.Any(c => !char.IsLetterOrDigit(c));
Run Code Online (Sandbox Code Playgroud)


Fil*_*sky 5

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

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