2010-01-04 5 views
4

Je crée une application qui envoie la chaîne d'entrée à l'appareil mobile. Certains périphériques ont des problèmes avec l'encodage des caractères spéciaux, donc je voudrais créer un filtre qui ne permette pas à l'utilisateur sur PC d'entrer des caractères spéciaux.filtre à chaîne: détecter les signes non-ASCII

L'application est écrit en C# (.NET 3.5) et je voudrais joindre une méthode à l'événement de touche. Le pseudo-code est le suivant:

private void checkTextBoxContent(TextBox txtEntry) 
{ 
    if(txtEntry.Text contains non-ASCII sign) 
    { 
     show messageBox; 
     remove the last entered character; 
    } 
} 

Est-ce que quelqu'un sait s'il y a une méthode existante qui détecte ASCII/signe non-ASCII de sorte que pourrait être utilisé dans un état

txtEntry.Text contient non-ASCII signe?

Merci!

Répondre

5

Eh bien, vous pouvez faire:

public static bool IsAllAscii(string text) 
{ 
    return text.All(c => c >= ' ' && c <= '~'); 
} 

Je ne suis pas sûr que vous voulez vraiment supprimer juste le dernier caractère bien - Pensez à couper et coller toute une chaîne non-ASCII ...

2

C'est une option regex (utilisant System.Text.RegularExpressions)

string s = "søme string"; 
    bool result = Regex.IsMatch(s, @".*[^\u0000-\u007F].*"); // result == true 
+0

ne soit pas beaucoup plus simple que cela. – JohnE

+0

Vous ne voulez probablement pas envoyer \ u0000 à un mobile non plus. Et j'ai gagné der combien serait perdu si vous avez jeté '\ u0001- \ u0008',' \ u000b', '\ u000c' et' \ u000f- \ u001f' aussi. '\ U0009' (TAB),' \ u000a' (CR) et '\ u000d' (LF) sont les seuls caractères de contrôle ASCII raisonnables. – MSalters

4

Je suppose que vous avez besoin d'ASCII imprimable plutôt que de simplement ASCII, donc vous voudrez probablement vous limiter à l'0x20 t HRU points de code 0x7e:

if (Regex.isMatch (str, @"[^\u0020-\u007E]", RegexOptions.None)) { 
    ... Show message box here ... 
    str = Regex.Replace (str, @"[^\u0020-\u007E]", string.Empty); 
} 

Mais je ne suis pas convaincu une boîte de message est la bonne façon de procéder. Cela pourrait obtenir très gênant. Il peut être préférable d'avoir un contrôle d'erreur sur votre formulaire quelque part que vous pouvez simplement définir à un message d'erreur (et bip pour les faire savoir) lorsque l'utilisateur entre un caractère invalide. Lorsque l'utilisateur entre un autre caractère (valide), réinitialisez ce contrôle à une chaîne vide. Cela semble beaucoup moins envahissant.

Questions connexes