2010-03-26 17 views

Odpowiedz

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

Czy przegapiłeś A-Z .. – Manish

+1

to zaakceptuje "à", czy jest to specjalny znak dla PO? (oczywiście, że nie, OP już zaakceptował odpowiedź) –

35

Zastosowanie String.IndexOfAny:

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

... 

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

Oczywiście, że pętla będzie wewnętrznie - ale przynajmniej nie trzeba to zrobić w kodzie.

+0

Hej Jon, jak zrealizujesz Myślenie Byersa? – Manish

+0

@Manish: Biorąc pod uwagę, że najprawdopodobniej masz szeroki wachlarz znaków do dodania do białej listy, prawdopodobnie skorzystasz z regex. –

10

Zamiast sprawdzenie czy ciąg zawiera znaki specjalne „” To często lepiej sprawdzić, czy wszystkie znaki w ciągu są „zwykłe” znaków, innymi słowy używać białej listy zamiast czarnej listy. Powodem jest to, że istnieje wiele postaci, które można by uważać za "znaki specjalne", a jeśli spróbujesz je wymienić, na pewno je przegapisz.

Zamiast robić to, o co prosiłeś, lepiej byłoby sprawdzić, czy twój ciąg pasuje do wyrażeń regularnych @"^\w+$", czy cokolwiek, czego potrzebujesz.

+1

Przyjemna myśl ... !! – Manish

+3

@Bubblewrap: Zasugerowałem użycie wyrażenia regularnego z białą listą. Czy nie jest to poprawna odpowiedź na pytanie? Problem z metodą czarnej listy to ten, w którym pisze "etcetera ...". Komputery nie mogą odgadnąć, co masz na myśli, a napisanie listy wszystkich znaków specjalnych jest IMHO niewłaściwym sposobem podejścia do tego problemu. –

+0

IMO to nie jest. Nie znając motywacji stojącej za tym pytaniem, nie można powiedzieć, że używanie białej listy jest lepszą (lub nawet ważną) alternatywą dla korzystania z IndexOfAny. Pytanie brzmiało, kiedy to czytałem, a konkretnie o czarnych listach. – Bubblewrap

-1

Korzystanie z PHP, można spróbować:

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

ten powróci TRUE jeśli ciąg zawiera coś innego niż litery lub liczby.

Mam nadzieję, że to pomoże.

+4

Pytanie zostało oznaczone jako C#. –

+2

Nie w języku C#, ale nadal dało mi wymagane wyrażenie regularne. :) – Manish

+0

@Manish: Cóż, to * a * regex - ale nie takie, które dokładnie pasuje do pytania. Gdybyś powiedział: "Chcę tylko dołączyć znaki alfanumeryczne, bez akcentów itp.", To byłaby to inna sprawa. –

-1

także ...

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

-1, konkretnie powiedziane, BEZ UŻYWANIA PĘTLI ... – Manish

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

starałem się osiągnąć inny wynik. Aby utworzyć metodę, która zwraca znak specjalny użyty do oddzielenia określonego ciągu, powiedz 1 # 4 # 5, aby użyć go do podziału tego samego ciągu znaków. Ponieważ system, który utrzymuję, jest zbudowany przez tak wiele różnych osób, aw niektórych przypadkach nie mam pojęcia, który jest wzór (zazwyczaj nie ma), to pomogło mi bardzo wiele. I nie mogę jeszcze głosować.

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

Dziękuję wam.

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

Oto krótki rozwiązanie do sprawdzania znaków specjalnych przy użyciu LINQ

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

Linq to nowa czerń.

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

Na IsSymbol(), ważne symbole są członkami UnicodeCategory.

  • Letterlike symboli, które zawierają zbiór matematycznych symboli alfanumerycznych oraz symboli, takich jak ℅, № i ™
  • Formy liczbowe, takie jak indeksy i indeksy górne
  • operatory matematyczne i strzały
  • symbole geometryczne
  • symbole techniczne
  • wzory
  • Braille'a
  • Dingbats

Edit:

nie złapać wszystkie znaki. To może uzupełnić:

string.Any(c => !char.IsLetterOrDigit(c)); 
Powiązane problemy