web-dev-qa-db-ja.com

C#での大文字と小文字を区別しない比較

次のコードを使用して2つの文字列を比較しています

string1.Contains(string2)

しかし、大文字と小文字を区別しない検索の結果が得られません。さらに、String.Compare cozを使用できません。名前が非常に大きいため、名前全体を一致させたくありません。私の必要性は大文字と小文字を区別しない検索を行うことであり、検索テキストはString1に含まれる任意の長さにすることができます。

例:用語* ************ *は名前です。テキストボックスに「erm」と入力すると、結果が得られます。しかし、「用語」を入力しても、結果は得られません。誰かが私を助けることができますか:)

9
PhOeNiX

string.Equals("this will return true", "ThIs WiLL ReTurN TRue", StringComparison.CurrentCultureIgnoreCase)

または、含む

if (string1.IndexOf(string2, StringComparison.CurrentCultureIgnoreCase) >= 0)

17
paul

私はこのような拡張方法を好みます。

public static class StringExtensions
{
    public static bool Contains(this string source, string value, StringComparison compareMode)
    {
        if (string.IsNullOrEmpty(source))
            return false;

        return source.IndexOf(value, compareMode) >= 0;
    }
}

このようにして、大文字または小文字でのコストのかかる変換を回避できることに注意してください。

この構文を使用して拡張機能を呼び出すことができます

 bool result = "This is a try".Contains("TRY", StringComparison.InvariantCultureIgnoreCase);
 Console.WriteLine(result);

注意:上記の拡張機能(すべての拡張メソッドに当てはまります)は、ネストされていない非ジェネリック静的クラス内で定義する必要があります MSDN参照を参照

10
Steve

両方の文字列を同じケースに変換します。 または のいずれかです。

string1.ToUpper().Contains(string2.ToUpper());
6
Habib

なぜこれではないのですか?

 if(string1.IndexOf(string2、StringComparison.OrdinalIgnoreCase)> = 0)
 {
} 
5
gethomast
string1.ToUpperInvariant().Contains(string2.ToUpperInvariant());
0
Jakub Konecki

両方の文字列を大文字に変換するか、正規表現を使用できます。

using System.Text.RegularExpressions;

class Program {
    static void Main(string[] args) {
        string string1 = "TermSomething";
        string string2 = "term";
        bool test1 = string1.ToUpperInvariant().Contains(string2.ToUpperInvariant());
        bool test2 = Regex.IsMatch(string1, Regex.Escape(string2), RegexOptions.IgnoreCase);
    }
}

正規表現を使用する場合は、検索文字列をエスケープして、特殊な正規表現文字が文字どおりに解釈されるようにする必要があることに注意してください。

0
Paolo Tedesco
Regex.IsMatch(string1,string2,RegexOptions.IgnoreCase);

これはブール値を返します.....

0
Vijay