2017-12-15 4 views
-3

In C# möchte ich überprüfen, ob eine Zeichenfolge mit *.js endet. Die Zeichenfolge ist der Name einer Datei und ich möchte wissen, ob die Datei JavaScript ist oder nicht.Stellen Sie sicher, dass die Zeichenfolge eine erforderliche Endung hat

Bisher fand ich nur auf diese Weise, es zu tun:

Assert.IsTrue(Regex.Matches(myFilename, "*.js").Count != 0); 

Ich scheint dies ein wenig zweifelhafte, weil ich die Anzahl der Vorkommen und nicht nur die Überprüfung zählen muß, wenn es einen gibt.

Auch schlägt der Code mit diesem Fehler:

Message: System.ArgumentException : parsing "*.js" - Quantifier {x,y} following nothing. 

Jede Idee, was mit dem Code falsch sein könnte?

Was ist der einfachste Weg zu behaupten, dass eine Zeichenkette mit einer bestimmten Regex übereinstimmt?

+7

Wie wäre es nur mit 'myFilename.EndsWith (". Js ")'? – DavidG

+0

@Liam Das ist kein gutes Ziel dupieren – DavidG

+0

Ja, ich (jetzt) ​​stimme zu.Sicher, es gibt ein Duplikat obwohl – Liam

Antwort

2

Die Probleme mit Ihrem regex sind:

  1. * besondere quantifier ist, ist es nicht nichts (Quelle Ihrer Fehler) folgen kann. Du meinst "Ich will etwas vorher". In Regex ist dies .*, aber in Ihrem Fall brauchen Sie es nicht einmal! Regex sind nicht gezwungen, die ganze Zeichenfolge, nur den Ausdruck Teil zu entsprechen.

  2. . ist ein Sonderzeichen auch. Es bedeutet "irgendein Charakter". Sie wollen nur einen tatsächlichen Punkt . Zeichen, also müssen Sie es auch entkommen. : \.

  3. Schließlich gibt es keine Genauigkeit, um das Ende der Zeichenfolge anzupassen. $

Correct regex wäre entweder "\.js$" (oder ".*\.js$ ") statt" *.js".


Und überhaupt, zu überprüfen, ob eine Zeichenfolge, die von einem bestimmten Teilkette endet, können Sie einfach string.EndsWith(".js") verwenden können, wie @Toshi beantwortet. Wahrscheinlich eine viel bessere Wahl in jedem Aspekt.

2

Verwenden Sie einfach EndsWith

Assert.IsTrue(myFilename!=null && myFilename.EndsWith(".js")); 
-1

Sie können die Teilstringfunktion verwenden, um die letzten drei Zeichen der Zeichenfolge zu extrahieren und zu vergleichen, ob sie gleich ".js" ist oder nicht.

Assert.IsTrue (myFile.Substring (myFile.Length-3), "Js")


Abgesehen davon ist, wie bereits erwähnt EndsWith auch eine optimale Lösung.

+0

Wenn die Antwort schlecht ist, können Sie Kommentare geben, so dass sie aktualisiert werden können, anstatt sie einfach ohne Erklärung zu verwerfen. "Keine Erklärung" wird mir nicht helfen, das Problem mit der Antwort zu verstehen. :) –

Verwandte Themen