2010-03-26 4 views

Répondre

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

Avez-vous manqué A-Z .. – Manish

+1

cela va accepter 'à', est-ce un caractère spécial pour l'OP? (bien sûr que non, l'OP a déjà accepté la réponse) –

35

Utilisation String.IndexOfAny:

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

... 

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

Bien sûr, qui boucle interne - mais au moins vous ne devez pas le faire dans votre code.

+0

Hey Jon, comment allez-vous implémenter la pensée de Mark Byers? – Manish

+0

@Manish: Étant donné que vous êtes susceptible d'avoir un large éventail de caractères à ajouter à la liste blanche, une regex est probablement la voie à suivre. –

10

Au lieu de vérifier si une chaîne contient des « caractères spéciaux », il est souvent préférable de vérifier que tous les caractères de la chaîne sont des caractères « ordinaires », autrement dit utiliser une liste blanche au lieu d'une liste noire. La raison en est qu'il y a beaucoup de caractères qui pourraient être considérés comme des "caractères spéciaux" et si vous essayez de les lister tous, vous en manquerez un. Donc, au lieu de faire ce que vous avez demandé, il pourrait être préférable de vérifier par exemple que votre chaîne correspond à la regex @"^\w+$", ou tout ce dont vous avez besoin.

+1

Belle pensée ... !! – Manish

+3

@Bubblewrap: J'ai suggéré d'utiliser une regex avec une liste blanche. N'est-ce pas une réponse valable à la question? Le problème avec la méthode de liste noire est le bit où il écrit 'etc ...'. Les ordinateurs ne peuvent pas deviner ce que vous voulez dire, et écrire une liste de tous les caractères spéciaux est à mon humble avis la mauvaise façon d'aborder ce problème. –

+0

IMO ce n'est pas. Sans connaître la motivation derrière la question, vous ne pouvez pas vraiment dire que l'utilisation d'une liste blanche est une meilleure alternative (ou même valide) à l'utilisation d'IndexOfAny. Et la question était, comme je l'ai lu, spécifiquement sur les listes noires. – Bubblewrap

-1

En utilisant PHP, vous pouvez essayer:

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

Ceci renvoie TRUE si la chaîne contient rien d'autre qu'une lettre ou un chiffre.

Hope this helps.

+4

La question est étiquetée C#. –

+2

Pas en C#, mais m'a quand même donné la regex nécessaire. :) – Manish

+0

@Manish: Eh bien, c'est * a * regex - mais pas celui qui correspond exactement à la question. Si vous aviez dit "je veux seulement inclure des caractères alphanumériques, et pas d'accents, etc.", cela aurait été différent. –

-1

aussi ...

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

-1, spécifiquement dit en question SANS UTILISER BOUCLE ... – 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

je cherchais à obtenir un résultat différent. Pour créer une méthode qui renvoie le caractère spécial utilisé pour séparer une chaîne déterminée, disons 1 # 4 # 5, pour ensuite l'utiliser pour diviser cette même chaîne. Depuis que le système que je maintiens est construit par autant de personnes différentes, et dans certains cas, je n'ai aucune idée du modèle (en général, il n'y en a pas), ce qui suit m'a beaucoup aidé. Et je ne peux pas voter jusqu'à présent.

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

Merci les gars.

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

Voici une courte solution pour vérifier les caractères spéciaux en utilisant LINQ

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

Linq est le nouveau noir.

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

Pour IsSymbol(), symboles valides sont membres de UnicodeCategory.

  • de type lettre symboles, qui comprennent un ensemble de symboles alphanumériques mathématiques ainsi que des symboles tels que ℅, ü, et ™
  • formes numériques, tels que les indices et les exposants
  • opérateurs mathématiques et des flèches
  • symboles géométriques
  • symboles techniques
  • patterns braille
  • symboles

Edit:

Cela ne saisit pas tous les caractères. Cela peut compléter:

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