2016-06-02 23 views
0

Ich weiß, dass dies schon einmal gefragt wurde, aber mein Code funktioniert nicht.Check String Nur Zeichen enthalten

Das Senario ist Ich muss überprüfen, ob eine Zeichenfolge enthält nur Buchstaben, Zahlen und Leerzeichen. Ich muss scheitern, wenn es etwas anderes enthält.

Ich habe die RegEx-Methode versucht, aber ich verstehe keine regulären Ausdrücke, also muss ich eine LINQ-Methode für meine Beurteilung verwenden.

Hier ist mein Code:

if (!CSVItemArray[count].All(Char.IsLetterOrDigit) && !CSVItemArray[count].Contains(" ")) 
{ 
    return false; 
} 
+0

Ist 'CSVItemArray' ein Array von Strings? – ChrisF

+0

@ChrisF Ja, ist es. – Smithy

+0

* Also muss ich eine LINQ-Methode für meine Beurteilung verwenden * ... Was hat LINQ mit der Suche nach Zeichentypen zu tun? – sstan

Antwort

1

etwas tun (zum Beispiel Regex verwenden), da nicht zu verstehen, es ist eine schlechte Sache ist - zumindest für Entwickler. Insbesondere, wenn das, was Sie tun möchten, leicht mit einer Regex erreicht werden kann.

Having said diese Sie einfach diese verwenden:

Regex r = new Regex("^[A-Za-z0-9\\s]*$"); 
var valid = r.IsMatch(myString); 

Diese für eine beliebige Anzahl von Groß- oder Kleinbuchstaben schauen, Ziffern und Leerzeichen-Zeichen. Die Sequenz selbst wird von [] umfasst, die folgende * legt fest, wie oft die Sequenz in der Zeichenfolge auftreten kann (in Ihrem Fall keine uo zu unendlichen Zeiten). Die ^ und $ dienen nur dazu, den Anfang und das Ende Ihrer Saite zu markieren. Dadurch wird vermieden, dass %asdfgh12345 // zum Beispiel übereinstimmt.

EDIT: Wenn Sie Umlaute auch brauchen (ä, ö, ü, ß, ...) können Sie sich this post ansehen, die auch Sonderzeichen verarbeiten.

+0

Guter Punkt. Deine Regex enthält nicht äöüß und diese Buchstaben. Aber OP hat nicht spezifiziert, was einen Brief für ihn macht. –

+0

@ RenéVogt Wichtiger Punkt, ich habe ein Update hinzugefügt. – HimBromBeere

+0

@HimBromBeere _ "Etwas tun [...], weil es nicht verstanden wird, ist eine schlechte Sache ..." _ Dem stimme ich definitiv zu. Ich werde lernen, wie Regex funktioniert, aber wenn ich es in meiner Einschätzung verwende, muss ich erklären, was es tut, und mein Tutor hat mir das nicht beigebracht, also würde es nicht gut gehen. – Smithy

3

einfach den Scheck für den Buchstaben kombinieren, Ziffer oder Leerzeichen in der All Abfrage:

if (!CSVItemArray[count].All(c => Char.IsLetterOrDigit(c) || Char.IsWhiteSpace(c))) 
{ 
    return false; 
} 
2

Ihre Logik ist ein wenig verwirrt. Die folgende Code gibt true, wenn die Zeichenfolge in CSVItemArray[count] enthalten nur Buchstaben, Ziffern und weiße Flächen:

return CSVItemArray[count].All(c => Char.IsLetterOrDigit(c) || Char.IsWhiteSpace(c)); 
+0

Es ist eine boolesche Validierungsfunktion, wenn sie meine Bedingung nicht erfüllt, gibt sie false zurück. – Smithy

+0

@Smithy Ja, das ist es. Ich sagte, dass es wahr zurückgibt, wenn es _ "nur Buchstaben, Ziffern und Leerzeichen" _ enthält, also fällt es zurück, wenn es etwas anderes als das gibt. Der Code überprüft, dass _All__ Zeichen in der Zeichenfolge Buchstaben, Ziffern oder Leerzeichen sind. –

Verwandte Themen