2009-03-15 15 views
1

ich bestimmte Eingabe in meine Webapp enthält nur Zeichen sicherstellen wollen, die als ascii vertreten kann (es ist für die Kennzeichnung und ich versuche, Speicherplatz in der Datenbank Spalte zu speichern, indem varchar statt nvarchar verwenden)Stellen Sie sicher, ascii Werte

Gibt es eine Framework-Funktion, um dies in .net zu tun oder sollte ich die Zeichencodes einzeln überprüfen, um sicherzustellen, dass sie im richtigen Bereich sind?

EDIT: Ich schrieb gerade diese Erweiterung Methode, aber es scheint zu umständlich für etwas so einfach.

public static bool IsAscii(this string value) 
{ 
    if (value != null) 
     for (int current = 0; current < value.Length; current++) 
     { 
      if ((int)value[current] > 127) 
       return false; 
     } 

    return true; 
} 
+0

Dies ist sehr unfreundlich zu Tags, die nicht auf Englisch sind. –

+0

Ich habe eine sehr sprachspezifische Problemdomäne ok –

Antwort

2

Da Sie eine Erweiterungsmethode verwenden, verwenden Sie vermutlich C# 3 und .NET 3.5. In diesem Fall würde ich verwenden:

using System.Linq; 

... 

public static bool IsPrintableAscii(this string value) 
{ 
    return value != null && value.All(c => c >= 32 && c < 127); 
} 

Dies prüft, ob jedes Zeichen im Bereich [U + 0020-U + 007E], die nur druckbare Zeichen enthalten. Ist es das wonach du suchst?

Wie andere Kommentare gesagt haben, wird das alles mit Akzenten usw. ausschließen - bist du sicher, dass das in Ordnung ist? Dies lehnt auch Wagenrücklauf, Zeilenvorschub und Tabulator ab. Nochmal, ist das in Ordnung?

1

Sie können den Text durch einen System.Text.ASCIIEncoding laufen, die sicherstellen, dass alles machen ist ASCII (alle Zeichen, die nicht in eine ASCII-Zeichen abbildet wird auf eine umgewandelt werden ‚?‘).

+0

Ja, ich könnte damit für meine Zwecke in einer Slugify-Methode durchkommen, da Fragezeichen sowieso nicht in Nacktschnecken gehören. Wenn ich das Fragezeichen wirklich erlauben würde, wäre es nicht so günstig. –

+0

Ich denke, es hängt davon ab, ob Sie etwas in reines ASCII umwandeln wollen (und es ist OK, ungültige Informationen zu verlieren) oder wenn Sie etwas, das nicht reines ASCII ist, validieren und ablehnen wollen. –

+0

@Michael validieren und ablehnen war mein Denken für diesen Zweck –

0

Das Problem, das ich mit Ihrer Lösung sehe, ist, dass Sie ASCII-Zeichen hereinlassen, die Sie wirklich nicht wollen. Sie werden auch die erweiterten ASCII-Codes ausschließen, wenn Sie andere Sprachen unterstützen möchten, um die Akzentbuchstaben speichern zu können.

Verwandte Themen