2012-12-28 10 views
15

文字列に.text.containsを使用して大文字小文字を無視して別の文字列が含まれているかどうかを調べる方法を解明しようとしています。string.text.containsの使用時に無視する方法は?

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

それはまったく同じケースである場合にのみ、一致を返します。それは私がこれを行う場合は、今現状では

。だから、ユーザーが「私の家は寒い」とタイプした場合、それは一致しません。

どうすればいいですか?それが可能でない場合、私はたぶん正規表現をignorecaseで代わりに使うことができます。どんな助けもありがとう。

答えて

30

Microsoftによると、あなたはIndexOfの代わりContainsで文字列に大文字と小文字を区別しない検索を行うことができます。したがって、IndexOfメソッドの結果が-1より大きい値を返す場合、2番目の文字列が最初の文字列の部分文字列であることを意味します。

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

またStringComparisonの他の大文字と小文字を区別しないバリアントを使用することができます。

+0

ああ、これはまさに私が探していたものです。私は彼らの文字列を比較するために使用できる別の文字列メソッドがあることを知っていました。どうもありがとう。それは有り難いです。 – user1632018

9

私はvb.netプログラマではありませんが、Microsoftによれば、文字列メソッドToUpper()またはToLower()を使用して、テキストの小文字/大文字の値を取得できます。それを"my house is cold"または"MY HOUSE IS COLD"と比較することができます。

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

を見つけた場合、私はより良い、このソリューションが好き。 –

+0

これは、グローバル化を伴う問題、特にトルコ語の問題を引き起こします。私はこの方法に注意するだろう。 – jt000

0

これは、String.Containsを大文字と小文字を区別しないようにするという私の問題を解決した方法です。

Dim s as string = "My HoUsE iS cOlD".ToUpper 

If s.Contains("MY HOUSE IS COLD") Then Exit Sub 

私の特に問題は、私がチェックしていた文字列がTextBox内に格納されていたことです。

こちらがお役に立てば幸いです。

0

また、このような正規表現を使用することもできます。

まず、インポートRegularExpressions:個人的に私はちょうど使用

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

これは過剰殺人のように見える – beppe9000

1

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

あなただけだけでなく、ほかのtoupper使用することができ

Imports System.Text.RegularExpressions 

は、このコードを試してみてください。

警告:ToLower()とToUpper()はトルコ語や他の言語を比較している場合、 "CultureInfo"のオプションパラメータを使用して、異なる言語が正しく処理されるようにします。 上記のソリューションを使用することも、MicrosoftのToLowerドキュメンテーションの手順に従ってCultureInfoを追加して、操作しようとしている言語のToLowerコンテキストを取得することもできます。これについて

ToLower() with CultureInfo documentation

ToUpper() with CultureInfo documentation

+0

さらに良い。ヤップ –

+0

これは、グローバリゼーションの問題、特にトルコ語の問題を引き起こします。私はこの方法に注意するだろう。 – jt000

+0

質問には、トルコ語をサポートする必要があると言われていないようです...特に、テキストと英語を比較しているときには...文化と無関係の比較はトルコ語から英語に翻訳するつもりはなく、それはただ文字を比較するつもりです。 –

0

何?

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

私は、例えば.toUpper

でこの問題を解決:.toLower

+0

申し訳ありませんが、それはドイツ語です。 CommataはCommasを意味します。 "これは私のコードではimportanだけです。しかし、混乱を広げないように削除しました。 – xcrookedxedge

+0

Dankefürdas +1!私は意味する:+1ありがとうございます。 – xcrookedxedge

+1

さて、あなたも今[[this](http://stackoverflow.com/help/privileges/vote-up)のための特権を持っているように見えます。 –

0

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 

同じ手順をInStr関数の例を使用します。 ether compareが無ければ "contains"が失敗します。

私たちが何か...

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

Beep 

End If 

               ' 
+0

この場合、InStrの最初のパラメータは不要です。入力パラメータと質問を一致させたい場合があります。私はMSDNによればこれが大文字小文字を区別しないとも思わない? – Tom

関連する問題