4 Stimmen

String-Filter: Nicht-ASCII-Zeichen erkennen

Ich erstelle eine Anwendung, die die Eingabezeichenfolge an ein mobiles Gerät sendet. Einige Geräte haben Probleme mit der Kodierung von Sonderzeichen, daher möchte ich einen Filter erstellen, der es dem Benutzer am PC nicht erlaubt, Sonderzeichen einzugeben.

Die Anwendung ist in C# (.NET 3.5) geschrieben und ich möchte eine Methode an das Tastendruckereignis anhängen. Der Pseudocode ist der folgende:

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

Weiß jemand, ob es eine bestehende Methode gibt, die ASCII/Nicht-ASCII-Zeichen erkennt, so dass sie in Bedingung verwendet werden könnte

txtEntry.Text enthält Nicht-ASCII-Zeichen?

Ich danke Ihnen!

6voto

Jon Skeet Punkte 1325502

Das können Sie tun:

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

Ich bin mir allerdings nicht sicher, ob Sie wirklich nur das letzte eingegebene Zeichen entfernen wollen - überlegen Sie, ob Sie nicht eine ganze Nicht-ASCI-Zeichenkette ausschneiden und einfügen wollen...

4voto

paxdiablo Punkte 809679

Ich gehe davon aus, dass Sie druckbares ASCII und nicht nur ASCII benötigen, also sollten Sie sich wahrscheinlich auf die Codepunkte 0x20 bis 0x7e beschränken:

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

Aber ich bin nicht davon überzeugt, dass ein Mitteilungsfeld der richtige Weg ist. Das könnte sehr lästig. Es ist vielleicht besser, irgendwo in Ihrem Formular eine Fehlerkontrolle zu haben, die Sie einfach auf eine Fehlermeldung (und einen Signalton) setzen können, wenn der Benutzer ein ungültiges Zeichen eingibt. Wenn der Benutzer ein anderes (gültiges) Zeichen eingibt, setzen Sie dieses Steuerelement auf eine leere Zeichenfolge zurück. Das scheint weit weniger aufdringlich zu sein.

2voto

serhio Punkte 27312

Dies ist eine Regex-Option (mit System.Text.RegularExpressions )

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X