2012-12-28 10 views
15

Ich versuche herauszufinden, wie überprüft werden kann, ob eine Zeichenfolge eine andere enthält, während die Groß-/Kleinschreibung mit .text.contains ignoriert wird.Wie ignoriert man bei Verwendung von string.text.contains?

Wie steht es jetzt, wenn ich dies tun:

Dim myhousestring As String = "My house is cold" 
    If txt.Text.Contains(myhousestring) Then 
    Messagebox.Show("Found it") 
    End If 

Es wird nur ein Spiel zurück, wenn es genau die gleiche Fall ist. Wenn der Benutzer also "mein Haus ist kalt" tippt, wäre es kein Match.

Wie kann ich das tun? Wenn es nicht möglich ist, könnte ich wahrscheinlich Regex stattdessen mit Ignorieren verwenden. Jede Hilfe wäre willkommen.

Antwort

30

Nach Microsoft können Sie Groß- und Kleinschreibung Suche in Strings mit IndexOf statt Contains zu tun. Wenn also das Ergebnis der Methode IndexOf einen Wert größer als -1 zurückgibt, bedeutet dies, dass die zweite Zeichenfolge eine Teilzeichenfolge der ersten Zeichenfolge ist.

Dim myhousestring As String = "My house is cold" 
If txt.Text.IndexOf(myhousestring, 0, StringComparison.CurrentCultureIgnoreCase) > -1 Then 
    Messagebox.Show("Found it") 
End If 

Sie können auch andere Groß- und Kleinschreibung Varianten von StringComparison verwenden.

+0

Ahh, genau das habe ich gesucht. Ich wusste, dass es eine andere String-Methode war, mit der Strings verglichen werden konnten. Danke vielmals. Ich schätze es. – user1632018

9

Ich bin kein vb.net Programmierer, aber nach Microsoft, können Sie den Kleinbuchstaben/Großbuchstaben Wert des Textes mit den String-Methoden ToUpper() oder ToLower(). Sie können das dann mit "my house is cold" oder "MY HOUSE IS COLD" vergleichen.

Dim myhousestring As String = "MY HOUSE IS COLD" 
If txt.Text.ToUpper.Contains(myhousestring) Then 
    Messagebox.Show("Found it") 
End If 
+0

gefunden Ich mag diese Lösung besser. –

+0

Dies verursacht Probleme mit Globalisierung speziell mit Türkisch i. Ich wäre vorsichtig mit dieser Methode. – jt000

0

So habe ich mein Problem gelöst, dass String.Contains case insensitive wird.

Bei meinem speziellen Problem befand sich die Zeichenfolge, die ich überprüfte, in einer TextBox.

Ich hoffe, das hilft.

0

Oder Sie können RegularExpressions wie folgt verwenden.

Zuerst importieren die Regular:

Imports System.Text.RegularExpressions 

dann diesen Code versuchen:

Dim match As Match = Regex.Match(Textbox1.text,"My house is cold",RegexOptions.IgnoreCase) 
If match.Success Then 
    Msgbox(match.Value) 
End If 
+0

das sieht aus wie ein Overkill – beppe9000

1

persönlich nur verwendet I:

item.Text.ToLower().Contains("my house is cold") 

Sie könnte auch genauso gut verwenden ToUpper .

Vorbehalt: Wenn Sie Türkisch oder andere Sprachen vergleichen, verwenden ToLower() und ToUpper() auch einen Optionsparameter für "CultureInfo", mit dem Sie sicherstellen können, dass verschiedene Sprachen korrekt behandelt werden. Sie können eine obige Lösung verwenden oder Sie können den Schritten aus der Microsoft ToLower-Dokumentation folgen, um CultureInfo hinzuzufügen, um den ToLower-Kontext in der Sprache zu erhalten, in der Sie versuchen zu manipulieren.

ToLower() with CultureInfo documentation

ToUpper() with CultureInfo documentation

+0

noch besser. kläffen. –

+0

Dies verursacht Probleme mit Globalisierung speziell mit Türkisch i. Ich wäre vorsichtig mit dieser Methode. – jt000

+0

Die Frage scheint nicht zu erwähnen, dass es Türkisch unterstützen muss ... vor allem, wenn wir den Text vergleichen, mit Englisch ... Die Kultur indifferent vergleichen wird nicht aus dem Türkischen ins Englische übersetzen, und DANN vergleichen, es wird nur die Charaktere vergleichen. –

0

Was ist das?

<Runtime.CompilerServices.Extension> 
Function InStr(s As String, find As String) As Boolean 
    Return s.ToLower.Contains(find.ToLower) 
End Function 
1

Ich löste dieses Problem mit .toUpper

Zum Beispiel:

Dim UGroup as String = dr.Item(2).ToString().ToUpper 
Dim s as String = ds.Item(1).ToString.ToUpper 

If s.Contains(UGroup) then MsgBox("Well done!") 
Else 
End Sub 

Die gleiche Prozedur mit .toLower

+0

Sorry, es ist ein deutsches Wort. Commata bedeutet Kommas. Also "," das ist nur wichtig in meinem Code. Aber ich habe es gelöscht, um keine Verwirrung zu verbreiten. – xcrookedxedge

+0

Danke für das +1! Ich meine: Danke für die +1 – xcrookedxedge

+1

Nun, sieht aus wie Sie jetzt auch das Privileg für [dies] (http://stackoverflow.com/help/privileges/vote-up) ... Verwenden Sie es, aber mit Bedacht! –

0

das InStr Beispiel. "contains" schlägt fehl, wenn Ether Compare nichts ist.

‚, wenn wir etwas ...

If InStr(1, value, search, vbTextCompare) > 0 Then 

Beep 

End If 

               ' 
+0

InStrs erster Parameter wird in diesem Fall nicht benötigt, und Sie möchten vielleicht Ihre Eingabeparameter mit den Fragen abgleichen. Ich denke auch nicht, dass dies nach MSDN case-insensativ ist? – Tom

Verwandte Themen