2010-03-26 311 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)); 
相關問題