2017-08-27 1 views
-4

Okay, also muss ich eine Variable testen, die alles außer Buchstaben enthält; Das bedeutet, dass keine Leerzeichen erlaubt sind, keine Zahlen und keine Symbole. Ich dachte, ich hätte es herausgefunden, aber ich kann keine Regex zur Arbeit bringen. Hier ist, was ich habe:Nur Buchstaben verwenden, true zurückgeben sonst

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 

namespace soro 
{ 
    class Program 
    { 
     static void notOnlyString(string word) 
     { 
      Regex.IsMatch(word, @"^[a-zA-Z]+$"); 
     } 

     static void Main(string[] args) 
     { 
      string var1; 
      //lots of code here 
      var1 = Console.ReadLine(); 
      if (notOnlyString(var1)) 
      { 
       //do this if it has a number, space or symbol; anything but 
       //letters 
      } 
      //more code 
     } 
    } 
+1

Was wissen Sie also über Variablentypen (wie Booleans) und Rückgabewerte? Sieht so aus, als könnten Sie ein gutes C# -Buch oder Tutorial verwenden. – CodeCaster

+1

Der Compiler sagt Ihnen, was das Problem ist. Lesen Sie die Fehlermeldung. – David

+0

Das * regex * ist nicht das Problem, es ist die Signatur der Methode 'notOnlyString', die das Problem verursacht. Es hat void als return-type was bedeutet, dass es nichts zurückgeben soll *. Was Sie stattdessen wünschen, ist ein Boolean. – HimBromBeere

Antwort

1

Sie können prüfen, es

bool result = word.All(Char.IsLetter); 

verwenden, wenn Sie Digits benötigen verwenden Sie es

bool result = word.All(Char.IsLetterOrDigit); 
+0

das schien zu funktionieren, obwohl es neu ist, sagt es nicht alle Code-Pfade geben einen Wert zurück und ich bin nicht ganz sicher, was es sagt ----------------------- ------------------------------------- static bool onlyString (Zeichenwort) { bool Ergebnis = Wort.Alle (Char.IsLetter); } auch neu zu Stack-Austausch – soro

+0

sollten Sie Ergebnis, statische bool onlyString (Zeichenfolge Wort) zurückgeben {bool result = word.All (Char.IsLetter); Ergebnis zurückgeben; } –

+0

omg vielen Dank und Entschuldigung für den schlampigen Kommentar – soro

-1

Sie sollten in der regex Syntax ändern: ^ [a-zA -Z] * $

Ein nettes on-line-Werkzeug ist Regex Tester

Hoffe, dies hilft, Serge

+0

Gründe warum? Der einzige Unterschied in Ihrem Beispiel ist die Übereinstimmung von 0-n Buchstaben, während er 1-n entspricht. Das macht aber keinen Unterschied, da die ganze Saite trotzdem gepasst hat. – jAC

1

Ihre Regex sieht korrekt aus. Der eine große Fehler an Ihrem Code ist der Rückgabetyp notOnlyString.

Die Benennung notOnlyString ist schlecht übrigens. Verwenden Sie keine "negative" Anweisung als Methodenname. Ich schlage vor, IsOnlyLetters.

Da Sie in einer if-Anweisung einen Aufruf an IsOnlyLetters senden, sollten Sie einen bool Wert zurückgeben.

static bool notOnlyString(string word) // note that I changed "void" to "bool" 
{ 
    return Regex.IsMatch(word, @"^[a-zA-Z]+$");/here I added "return" to return the result of the "IsMatch" call. 
} 

Nun sollten Sie die Bedingung in der if-Anweisung zu (!IsOnlyLetters(var1)) ändern und sollte alles funktionieren.

Verwandte Themen