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

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

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

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

使用String.IndexOfAny

 private static readonly char[] SpecialChars = "!@#$%^&*()".ToCharArray(); ... int indexOf = text.IndexOfAny(SpecialChars); if (indexOf == -1) { // No special chars } 

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

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

因此,不要按照你的要求进行检查,例如检查你的字符串是否匹配正则表达式@"^\w+$" ,或者你需要的任何东西。

Linq是新的黑人。

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

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

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

编辑:

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

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

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

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

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

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

感谢你们。

 //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 
 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; } 

使用PHP,您可以尝试:

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

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

希望这可以帮助。

也…

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