2010-03-26 114 views

回答

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

你错过了A-Z .. – Manish 2010-03-26 11:59:19

+1

这会接受'à',是OP的特殊字符吗? (当然不是,OP已经接受了答案) – 2015-11-06 10:12:50

35

使用String.IndexOfAny

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

... 

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

当然,将循环在内部 - 但至少你没有做,在你的代码。

+0

嘿乔恩,你将如何实施马克的拜尔斯思想? – Manish 2010-03-26 12:00:40

+0

@Manish:鉴于你可能会有大量的人物进入白名单,一个正则表达式可能就是要走的路。 – 2010-03-26 12:15:21

10

而不是检查如果字符串包含“特殊字符”它往往是更好地检查该字符串中的所有字符都是“普通人”的角色,换句话说,使用白名单,而不是黑名单的。原因是有很多角色可以被认为是“特殊角色”,如果你试图列出所有你肯定会错过的角色。

因此,不要做你所问的问题,而是检查一下例如你的字符串是否匹配正则表达式@"^\w+$",或者你需要的任何东西。

+1

好的想法...... !! – Manish 2010-03-26 11:59:51

+3

@Bubblewrap:我建议在白名单中使用正则表达式。这不是问题的有效答案吗?黑名单方法的问题在于他写'etc ...'的位。计算机无法猜测你的意思,并写出所有特殊字符的列表是恕我直言,这是解决这个问题的错误方法。 – 2010-03-26 12:02:50

+0

IMO它不是。不知道问题背后的动机,你不能真正说使用白名单是使用IndexOfAny更好的(或者甚至是有效的)选择。当我读到它时,问题就是关于黑名单的问题。 – Bubblewrap 2010-03-26 12:08:22

-1

使用PHP,你可以尝试:

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

这将返回TRUE,如果字符串包含一个字母或数字的任何其他。

希望这会有所帮助。

+4

这个问题被标记为C#。 – 2010-03-26 11:57:56

+2

不在C#中,但仍然给我所需的正则表达式。 :) – Manish 2010-03-26 11:58:59

+0

@Manish:嗯,那是* a *正则表达式 - 但不是完全匹配问题的那个。如果你说“我只想包括字母数字字符,没有口音等”,那么这将是一个不同的问题。 – 2010-03-26 12:16:07

-1

也...

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

-1,具体说问题没有使用LOOP ... – Manish 2010-03-26 12:23:25

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

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

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

public String Separator(){ 
     **String specialCharacters = "%[email protected]#$#^&*()?/>.<:;\\|}]{[_~`+=-" +"\"";** 
     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; 
    } 

谢谢你们。

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 
3

这里是一个简短的解决方案来检查使用LINQ

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

LINQ的特殊字符是新的黑色。

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

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

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

编辑:

这没有捕捉到所有的字符。这可以补充:

string.Any(c => !char.IsLetterOrDigit(c)); 
相关问题