Je voudrais vérifier une chaîne pour des caractères non valides. Avec des caractères non valides, je veux dire des personnages qui ne devraient pas être là. Quels sont les caractères? Ceci est différent, mais je pense que cela n'est pas que l'importan, c'est savoir comment dois-je faire cela et quel est le moyen le plus facile et le meilleur (performance) de le faire? P>
Disons que je veux juste que je veux juste des cordes qui contiennent Donc si j'ai une corde comme " Hello Stackoverflow em> strong>" => invalide, à cause du "A".
Ok maintenant comment faire ça? Je pourrais faire une liste
4 Réponses :
Vous pouvez utiliser une expression régulière pour cela:
for (char c = 'A'; c <= 'Z'; c++) { // c or c.ToString() depending on what you need }
Ah c'est peut-être beaucoup plus facile alors de comparer une liste. Bonne idée
Une question à cela. Ne devrait-il pas y avoir si (! R.Amatching (quelque chose)) => La validation a échoué? Parce que si sa validation correspondante va bien, ou?
Non, la regex correspond si la chaîne contient n'importe quel caractère pas i> dans le [A-Z0-9. $] code> plage - c'est beaucoup plus efficace depuis que le moteur REGEX peut Arrêtez dès que cela a trouvé un tel caractère.
Ah j'étais confus car n'a jamais utilisé Regex en C #. Donc, le «^ 'au début de la regex est quelque chose comme«! » (ne pas)
Oui, ça nie la classe de personnages.
Je n'ai que simplement écrit une telle fonction et une version étendue pour limiter les premiers et les derniers caractères en cas de besoin. La fonction d'origine ne vérifie que si la chaîne est constituée ou non de caractères valides uniquement, la fonction étendue ajoute deux entiers pour les numéros de caractères valides au début de la liste à sauter lors de la vérification des premier et du dernier caractère, dans la pratique. La fonction d'origine 3 fois, dans l'exemple ci-dessous, il garantit que la chaîne commence par une lettre et ne se termine pas avec un soulignement.
StrChr(String, "_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")); StrChrEx(String, "_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", 11, 1)); BOOL __cdecl StrChr(CHAR* str, CHAR* chars) { for (int s = 0; str[s] != 0; s++) { int c = 0; while (true) { if (chars[c] == 0) { return false; } else if (str[s] == chars[c]) { break; } else { c++; } } } return true; } BOOL __cdecl StrChrEx(CHAR* str, CHAR* chars, UINT excl_first, UINT excl_last) { char first[2] = {str[0], 0}; char last[2] = {str[strlen(str) - 1], 0}; if (!StrChr(str, chars)) { return false; } if (excl_first != 0) { if (!StrChr(first, chars + excl_first)) { return false; } } if (excl_last != 0) { if (!StrChr(last, chars + excl_last)) { return false; } } return true; }
Si vous utilisez C #, vous utilisez facilement la liste et contient. Vous pouvez le faire avec des caractères simples (dans une chaîne) ou une chaîne multicharacter juste la même
Si vous n'êtes pas très bon avec des expressions régulières, il y a une autre façon d'y aller dans C #. Voici un bloc de code que j'ai écrit pour tester une variable de chaîne nommée notifname: Vous pouvez modifier les caractères ajoutés au tableau si nécessaire. La méthode de l'index de la matrice est la clé du tout. Bien sûr, si vous voulez que des virgules soient valides, vous devez choisir un caractère fractionné différent. P> P>
Vous pouvez utiliser votre idée de la liste des caractères, puis utiliser l'index de la chaîne pour le faire ou utilisez regex.
S'il vous plaît demander une seule question dans une question si question. Si vous avez deux questions, demandez deux questions à deux questions. Merci.