Rechercher la présence de caractères speciaux [Résolu]

Signaler
Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009
-
Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009
-
Salut tous le monde,

Avant de réinventer la roue, je voulais savoir s'il existait un méthode pertant de dire si oui ou non une chaine de caractères contient des caractères spéciaux, pour valider des chaines contenant des caractères de a-z et A-Z... rien d'autre, je ne veux ni remplacer, ni supprimer, juste valider une chaine de caractères... je cherche une méthode fesant cela, mais je trouve pas, je sans doute au mauvais endroit, et je suis sur d'avoir croisé ca un jour...

Merci.
A voir également:

6 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Pour être plus complet:

bool ok =
true;

foreach (
char c
in myString)
{
  
if (c < 65 || c > 122 && (c > 90 || c < 97))
   {
      ok =
false;
     
break;
   }
}

<hr />
-Blog-
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
61
Hello,

Je ne suis de loin pas un spécialiste des expressions régulières, mais à mon avis c'est le moyen le plus simple d'atteindre ton but sans parcourir la chaîne.

using

System.Text.RegularExpressions;

....

Regex reg = newRegex("^[a-zA-Z]*$"
);
if
(reg.IsMatch(tbx_File.Text))

{}
else
{}

Pour une petite explication :

[a-zA-Z] donne la liste des charactères autorisés
* indique que ces charactère peuvent être présent de 0 à N fois.
^ et $ indiquent respectivement le début et la fin de la chaîne de charactères

Amicalement, SharpMao
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Si c'est juste pour savoir combien y'a de caractères qui ne sont pas des lettres, une autre solution (qui sera peut-être plus rapide à l'exécution qu'une Regex) c'est d'itérer sur chaque caractère de la chaîne et d'appeler la méthode char.IsLetter. On a donc qqch comme:

bool ok = true;
foreach(char c in myString)
{
   if(!char.IsLetter(c)) { ok = false; break; }
}

<hr />
-Blog-
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
61
Hello,

Si j'ai bien compris sa question, il veut valider des chaines ne contenant que a-zA-Z, isLetter est vrai avec un charactère accentué aussi, ce qu'il aimerait éviter.

Amicalement, SharpMao
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Ha, bah dans ce cas il suffit de changer légèrement le teste:

c > 65 && c < xx (puis la même chose pour les majuscule)

<hr />
-Blog-
Messages postés
219
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
7 septembre 2009

Merci... la dernière solution est celle que je voulais adopter, je croyais qu'il existait un genre de IsLetter pour les chaine.