Trường hợp không nhạy cảm 'Chứa (chuỗi)'


2908

Có cách nào để làm cho sự trở lại sau đây đúng không?

string title = "ASTRINGTOTEST";
title.Contains("string");

Dường như không có sự quá tải cho phép tôi thiết lập độ nhạy trường hợp .. Hiện tại tôi TĂNG CƯỜNG cả hai, nhưng điều đó thật ngớ ngẩn (trong đó tôi đang đề cập đến các vấn đề i18n đi kèm với vỏ lên xuống).

CẬP NHẬT
Câu hỏi này là cổ xưa và kể từ đó tôi nhận ra rằng tôi đã yêu cầu một câu trả lời đơn giản cho một chủ đề thực sự rộng lớn và khó khăn nếu bạn quan tâm điều tra nó đầy đủ.
Đối với hầu hết các trường hợp, trong ngôn ngữ đơn ngữ, mã tiếng Anh dựa trên câu trả lời này sẽ đủ. Tôi nghi ngờ bởi vì hầu hết mọi người đến đây đều thuộc loại này, đây là câu trả lời phổ biến nhất. Tuy nhiên, câu trả lời
này đưa ra một vấn đề cố hữu là chúng ta không thể so sánh trường hợp văn bản không nhạy cảm cho đến khi chúng ta biết cả hai văn bản là cùng một nền văn hóa và chúng ta biết văn hóa đó là gì. Đây có thể là một câu trả lời ít phổ biến hơn, nhưng tôi nghĩ nó đúng hơn và đó là lý do tại sao tôi đánh dấu nó như vậy.

Câu trả lời:


1398

Để kiểm tra xem chuỗi paragraphcó chứa chuỗi không word(cảm ơn @QuarterMeister)

culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0

Trong trường hợp culturelà thể hiện của CultureInfomô tả ngôn ngữ mà văn bản được viết bằng.

Giải pháp này minh bạch về định nghĩa không phân biệt chữ hoa chữ thường, phụ thuộc vào ngôn ngữ . Ví dụ, ngôn ngữ tiếng Anh sử dụng các ký tự Iicho các phiên bản chữ hoa và chữ thường của chữ thứ chín, trong khi ngôn ngữ Thổ Nhĩ Kỳ sử dụng các ký tự này cho các chữ cái thứ mười một và mười hai của bảng chữ cái dài 29 chữ cái. Phiên bản chữ hoa của tiếng Thổ Nhĩ Kỳ 'i' là ký tự lạ '' '.

Do đó, các chuỗi tinTINlà cùng một từ trong tiếng Anh , nhưng các từ khác nhau trong tiếng Thổ Nhĩ Kỳ . Theo tôi hiểu, một nghĩa là "tinh thần" và cái còn lại là một từ onomatopoeia. (Turks, xin vui lòng sửa cho tôi nếu tôi sai, hoặc đề xuất một ví dụ tốt hơn)

Để tóm tắt, bạn chỉ có thể trả lời câu hỏi 'hai chuỗi này giống nhau nhưng trong các trường hợp khác nhau' nếu bạn biết văn bản đó thuộc ngôn ngữ nào . Nếu bạn không biết, bạn sẽ phải mất một thời gian. Với quyền bá chủ của tiếng Anh trong phần mềm, có lẽ bạn nên dùng đến CultureInfo.InvariantCulture, vì nó sẽ sai theo những cách quen thuộc.


67
Tại sao không culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0? Điều đó sử dụng văn hóa đúng và không phân biệt chữ hoa chữ thường, nó không phân bổ các chuỗi chữ thường tạm thời và nó tránh được câu hỏi liệu chuyển đổi sang chữ thường và so sánh luôn giống như so sánh không phân biệt chữ hoa chữ thường.
Quartermeister

9
Giải pháp này cũng gây ô nhiễm không cần thiết bằng cách phân bổ bộ nhớ cho chức năng tìm kiếm
JaredPar 18/03/13

15
So sánh với ToLower () sẽ cho kết quả khác với IndexOf không phân biệt chữ hoa chữ thường khi hai chữ cái khác nhau có cùng chữ cái viết thường. Ví dụ: gọi ToLower () trên U + 0398 "Chữ viết hoa chữ Hy Lạp Theta" hoặc U + 03F4 "Biểu tượng chữ cái chữ Hy Lạp" kết quả trong U + 03B8, "Chữ nhỏ Hy Lạp Theta", nhưng chữ in hoa được coi là khác nhau. Cả hai giải pháp đều xem xét các chữ cái viết thường có cùng chữ in hoa khác nhau, chẳng hạn như U + 0073 "Chữ nhỏ Latin S" và U + 017F "Chữ nhỏ Latin dài S", vì vậy giải pháp IndexOf có vẻ phù hợp hơn.
Quartermeister

3
@Quartermeister - và BTW, tôi tin rằng .NET 2 và .NET4 hoạt động khác nhau vì điều này .NET 4 luôn sử dụng NORM_LINGUISTIC_CASING trong khi .NET 2 thì không (cờ này đã xuất hiện với Windows Vista).
Simon Mourier

10
Tại sao bạn không viết "ddddfg". IndexOf ("Df", StringComparison.OrdinalIgnoreCase)?
Chen

2713

Bạn có thể sử dụng Phương thức String.IndexOf và chuyển qua StringComparison.OrdinalIgnoreCaselàm loại tìm kiếm để sử dụng:

string title = "STRING";
bool contains = title.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;

Thậm chí tốt hơn là xác định một phương thức mở rộng mới cho chuỗi:

public static class StringExtensions
{
    public static bool Contains(this string source, string toCheck, StringComparison comp)
    {
        return source?.IndexOf(toCheck, comp) >= 0;
    }
}

Lưu ý, việc truyền bá null ?. có sẵn kể từ C # 6.0 (VS 2015), cho các phiên bản cũ hơn sử dụng

if (source == null) return false;
return source.IndexOf(toCheck, comp) >= 0;

SỬ DỤNG:

string title = "STRING";
bool contains = title.Contains("string", StringComparison.OrdinalIgnoreCase);

3
Phương pháp mở rộng chuỗi tuyệt vời! Tôi đã chỉnh sửa của tôi để kiểm tra chuỗi nguồn không phải là null để ngăn bất kỳ lỗi tham chiếu đối tượng nào xảy ra khi thực hiện. IndexOf ().
Richard Pursehouse

8
Điều này đưa ra câu trả lời tương tự như paragraph.ToLower(culture).Contains(word.ToLower(culture))với CultureInfo.InvariantCulturevà nó không giải quyết bất kỳ vấn đề nội địa hóa nào. Tại sao quá phức tạp mọi thứ? stackoverflow.com/a/15464440/284795
Đại tá Panic

60
@ColonelPanic ToLowerphiên bản bao gồm 2 phân bổ không cần thiết trong hoạt động so sánh / tìm kiếm. Tại sao không cần phân bổ trong một kịch bản không yêu cầu?
JaredPar 18/03/13

4
@Sottacakes không hoạt động vì đó stringlà lý IEnumerable<char>do bạn không thể sử dụng nó để tìm các chuỗi con
JaredPar

6
Một lời cảnh báo: Mặc định cho string.IndexOf(string)là sử dụng văn hóa hiện tại, trong khi mặc định string.Contains(string)là sử dụng bộ so sánh thứ tự. Như chúng ta biết, cái trước có thể được thay đổi là chọn quá tải lâu hơn, trong khi cái sau không thể thay đổi. Hậu quả của sự không nhất quán này là mẫu mã sau:Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; string self = "Waldstrasse"; string value = "straße"; Console.WriteLine(self.Contains(value));/* False */ Console.WriteLine(self.IndexOf(value) >= 0);/* True */
Jeppe Stig Nielsen

231

Bạn có thể sử dụng IndexOf()như thế này:

string title = "STRING";

if (title.IndexOf("string", 0, StringComparison.CurrentCultureIgnoreCase) != -1)
{
    // The string exists in the original
}

Vì 0 (không) có thể là một chỉ mục, bạn kiểm tra so với -1.

MSDN

Vị trí chỉ mục dựa trên giá trị 0 nếu chuỗi đó được tìm thấy hoặc -1 nếu không. Nếu giá trị là String.Empty, giá trị trả về là 0.


148

Giải pháp thay thế bằng Regex:

bool contains = Regex.IsMatch("StRiNG to search", Regex.Escape("string"), RegexOptions.IgnoreCase);

6
Ý tưởng tốt, chúng tôi cũng có rất nhiều kết hợp bitwise trong RegexOptions như RegexOptions.IgnoreCase & RegexOptions.IgnorePatternWhitespace & RegexOptions.CultureInvariant;cho bất kỳ ai nếu được giúp đỡ.
Saravanan

7
Phải nói rằng tôi thích phương pháp này mặc dù sử dụng IsMatch cho sự gọn gàng.
wonea

31
Tệ hơn nữa, vì chuỗi tìm kiếm được hiểu là regex, một số ký tự dấu chấm câu sẽ gây ra kết quả không chính xác (hoặc kích hoạt một ngoại lệ do biểu thức không hợp lệ). Hãy thử tìm kiếm "."trong "This is a sample string that doesn't contain the search string". Hoặc thử tìm kiếm "(invalid", cho vấn đề đó.
cHao

17
@cHao: Trong trường hợp đó, Regex.Escapecó thể giúp đỡ. Regex vẫn có vẻ không cần thiết khi IndexOf/ phần mở rộng Containsđơn giản (và rõ ràng hơn).
Dan Mangiarelli

6
Lưu ý rằng tôi không ngụ ý rằng giải pháp Regex này là cách tốt nhất để đi. Tôi chỉ đơn giản là thêm vào danh sách các câu trả lời cho câu hỏi được đăng ban đầu "Có cách nào để trả lại đúng không?".
Jed

79

Bạn luôn có thể chỉ cần tăng hoặc giảm các chuỗi đầu tiên.

string title = "string":
title.ToUpper().Contains("STRING")  // returns true

Rất tiếc, chỉ cần nhìn thấy chút cuối cùng. Một trường hợp so sánh không nhạy cảm *có thể sẽ *làm điều tương tự và dù sao hiệu suất không phải là vấn đề, tôi không thấy vấn đề gì với việc tạo các bản sao in hoa và so sánh chúng. Tôi có thể đã thề rằng tôi đã từng thấy một so sánh không nhạy cảm một lần ...


122
Tìm kiếm "bài kiểm tra Thổ Nhĩ Kỳ" :)
Jon Skeet

7
Ở một số địa phương của Pháp, các chữ cái viết hoa không có dấu phụ, vì vậy ToUpper () có thể không tốt hơn ToLower (). Tôi muốn sử dụng các công cụ thích hợp nếu chúng có sẵn - so sánh không phân biệt chữ hoa chữ thường.
Blair Conrad

5
Đừng sử dụng ToUpper hoặc ToLower và làm những gì Jon Skeet đã nói
Peter Gfader

14
Chỉ cần nhìn thấy điều này một lần nữa sau hai năm và một downvote mới ... dù sao, tôi đồng ý rằng có nhiều cách tốt hơn để so sánh các chuỗi. Tuy nhiên, không phải tất cả các chương trình sẽ được bản địa hóa (hầu hết sẽ không) và nhiều chương trình là các ứng dụng nội bộ hoặc vứt đi. Vì tôi khó có thể mong đợi tín dụng cho lời khuyên tốt nhất dành cho các ứng dụng vứt đi ... Tôi sẽ tiếp tục: D
Ed S.

8
Tìm kiếm "bài kiểm tra Thổ Nhĩ Kỳ" có giống như tìm kiếm "KIỂM TRA TURKEY" không?
JackAce

55

Chỉ .NET Core 2.0+ (tính đến thời điểm hiện tại)

.NET Core đã có một cặp phương pháp để giải quyết vấn đề này kể từ phiên bản 2.0:

  • String.Contains (Char, StringComparison )
  • String.Contains (Chuỗi, StringComparison )

Thí dụ:

"Test".Contains("test", System.StringComparison.CurrentCultureIgnoreCase);

Theo thời gian, họ có thể sẽ tìm đường đến .NET Standard và từ đó, vào tất cả các triển khai khác của Thư viện lớp cơ sở.


1
Hiện cũng có sẵn trong .NET Standard 2.1
Paweł Bulwan

52

Một vấn đề với câu trả lời là nó sẽ đưa ra một ngoại lệ nếu một chuỗi là null. Bạn có thể thêm nó dưới dạng kiểm tra để nó không bị:

public static bool Contains(this string source, string toCheck, StringComparison comp)
{
    if (string.IsNullOrEmpty(toCheck) || string.IsNullOrEmpty(source))
        return true;

    return source.IndexOf(toCheck, comp) >= 0;
} 

8
Nếu toCheck là chuỗi rỗng, nó cần trả về true theo tài liệu Chứa: "true nếu tham số giá trị xảy ra trong chuỗi này hoặc nếu giá trị là chuỗi rỗng (" "); nếu không, sai."
amurra

3
Dựa trên nhận xét của amurra ở trên, không phải mã được đề xuất cần phải sửa? Và không nên thêm điều này vào câu trả lời được chấp nhận, để phản hồi tốt nhất là trước tiên?
David White

13
Bây giờ điều này sẽ trả về true nếu nguồn là một chuỗi rỗng hoặc null cho dù toCheck là gì. Điều đó không thể chính xác. Ngoài ra IndexOf đã trả về true nếu toCheck là một chuỗi rỗng và nguồn không phải là null. Điều cần thiết ở đây là kiểm tra null. Tôi đề nghị nếu (nguồn == null | | value == null) trả về false;
Colin

2
Nguồn không thể rỗng
Lucas

1
if (string.IsNullOrEmpty(source)) return string.IsNullOrEmpty(toCheck);
Kyle Delaney

35

Lớp StringExtension là con đường phía trước, tôi đã kết hợp một vài bài viết ở trên để đưa ra một ví dụ mã hoàn chỉnh:

public static class StringExtensions
{
    /// <summary>
    /// Allows case insensitive checks
    /// </summary>
    public static bool Contains(this string source, string toCheck, StringComparison comp)
    {
        return source.IndexOf(toCheck, comp) >= 0;
    }
}

Tại sao bạn lại cho phép lớp trừu tượng KHÁC StringComparison?
l --'''''--------- '' '' '' '' '' ''

35

Điều này là sạch sẽ và đơn giản.

Regex.IsMatch(file, fileNamestr, RegexOptions.IgnoreCase)

31
Điều này sẽ phù hợp với một mô hình, mặc dù. Trong ví dụ của bạn, nếu fileNamestrcó bất kỳ ký tự regex đặc biệt (ví dụ như *, +, ., vv) sau đó bạn sẽ được in cho khá một sự ngạc nhiên. Cách duy nhất để làm cho giải pháp này hoạt động giống như một Containschức năng thích hợp là thoát ra fileNamestrbằng cách thực hiện Regex.Escape(fileNamestr).
XåpplI'-I0llwlg'I -

bên cạnh đó, phân tích cú pháp và khớp một regex tốn nhiều tài nguyên hơn so với so sánh không phân biệt chữ hoa chữ thường đơn giản
phuclv

29

OrdinalIgnoreCase, CurrentCARMIgnoreCase hoặc InvariantCARMIgnoreCase?

Vì điều này bị thiếu, đây là một số khuyến nghị về thời điểm sử dụng cái nào:

Liều dùng

  • Sử dụng StringComparison.OrdinalIgnoreCaseđể so sánh làm mặc định an toàn của bạn để khớp chuỗi không liên quan đến văn hóa.
  • Sử dụng StringComparison.OrdinalIgnoreCaseso sánh để tăng tốc độ.
  • Sử dụng StringComparison.CurrentCulture-basedcác thao tác chuỗi khi hiển thị đầu ra cho người dùng.
  • Chuyển đổi sử dụng hiện tại của các hoạt động chuỗi dựa trên văn hóa bất biến để sử dụng phi ngôn ngữ StringComparison.Ordinalhoặc StringComparison.OrdinalIgnoreCasekhi so sánh là
    không liên quan về mặt ngôn ngữ (ví dụ tượng trưng).
  • Sử dụng ToUpperInvariantthay vì ToLowerInvariantkhi bình thường hóa chuỗi để so sánh.

Không

  • Sử dụng quá tải cho các hoạt động chuỗi không chỉ định rõ ràng hoặc ngầm định cơ chế so sánh chuỗi.
  • Sử dụng StringComparison.InvariantCulturecác
    hoạt động chuỗi dựa trên hầu hết các trường hợp; một trong số ít trường hợp ngoại lệ sẽ
    tồn tại dữ liệu có ý nghĩa về mặt ngôn ngữ nhưng không liên quan đến văn hóa.

Dựa trên những quy tắc này bạn nên sử dụng:

string title = "STRING";
if (title.IndexOf("string", 0, StringComparison.[YourDecision]) != -1)
{
    // The string exists in the original
}

trong khi [YourDecision] phụ thuộc vào các khuyến nghị từ phía trên.

liên kết của nguồn: http://msdn.microsoft.com/en-us/l Library / ms973919.aspx


nếu bạn biết bạn sẽ luôn có được một chuỗi tiếng Anh. cái nào để sử dụng
BKSpurgeon

1
@BKSpurgeon Tôi sẽ sử dụng OrdinalIgnoreCase, nếu trường hợp không quan trọng
Fabian Bigler

20

Đây là những giải pháp dễ nhất.

  1. Theo chỉ số của

    string title = "STRING";
    
    if (title.IndexOf("string", 0, StringComparison.CurrentCultureIgnoreCase) != -1)
    {
        // contains 
    }
  2. Bằng cách thay đổi trường hợp

    string title = "STRING";
    
    bool contains = title.ToLower().Contains("string")
  3. Bởi Regex

    Regex.IsMatch(title, "string", RegexOptions.IgnoreCase);

11

Tôi biết rằng đây không phải là C #, nhưng trong khung (VB.NET) đã có chức năng như vậy

Dim str As String = "UPPERlower"
Dim b As Boolean = InStr(str, "UpperLower")

Biến thể C #:

string myString = "Hello World";
bool contains = Microsoft.VisualBasic.Strings.InStr(myString, "world");

11

Các InStrphương pháp từ VisualBasic lắp ráp là tốt nhất nếu bạn có một mối quan tâm về quốc tế hóa (hoặc bạn có thể reimplement nó). Nhìn vào nó, dotNeetPeek cho thấy rằng nó không chỉ chiếm mũ và chữ thường mà còn cho các loại kana và các ký tự đầy đủ so với nửa chiều rộng (chủ yếu liên quan đến các ngôn ngữ châu Á, mặc dù cũng có các phiên bản đầy đủ của bảng chữ cái La Mã ). Tôi đang bỏ qua một số chi tiết, nhưng hãy kiểm tra phương pháp riêng tư InternalInStrText:

private static int InternalInStrText(int lStartPos, string sSrc, string sFind)
{
  int num = sSrc == null ? 0 : sSrc.Length;
  if (lStartPos > num || num == 0)
    return -1;
  if (sFind == null || sFind.Length == 0)
    return lStartPos;
  else
    return Utils.GetCultureInfo().CompareInfo.IndexOf(sSrc, sFind, lStartPos, CompareOptions.IgnoreCase | CompareOptions.IgnoreKanaType | CompareOptions.IgnoreWidth);
}

11

Chỉ như thế này:

string s="AbcdEf";
if(s.ToLower().Contains("def"))
{
    Console.WriteLine("yes");
}

3
Đây không phải là văn hóa cụ thể và có thể thất bại trong một số trường hợp. văn hóa.CompareInfo.IndexOf (đoạn, từ, so sánhOptions.IgnoreCase) nên được sử dụng.
hikalkan


8

Dùng cái này:

string.Compare("string", "STRING", new System.Globalization.CultureInfo("en-US"), System.Globalization.CompareOptions.IgnoreCase);

26
Người hỏi đang tìm kiếm Containskhông Compare.
DuckMaestro

@DuckMaestro, câu trả lời được chấp nhận đang triển khai Containsvới IndexOf. Vì vậy, cách tiếp cận này cũng hữu ích không kém! Ví dụ mã C # trên trang này đang sử dụng chuỗi.Compare (). Đó là sự lựa chọn của nhóm SharePoint!
quạ Vulcan

6

Điều này khá giống với ví dụ khác ở đây, nhưng tôi đã quyết định đơn giản hóa enum thành bool, vì các lựa chọn thay thế khác thường không cần thiết. Đây là ví dụ của tôi:

public static class StringExtensions
{
    public static bool Contains(this string source, string toCheck, bool bCaseInsensitive )
    {
        return source.IndexOf(toCheck, bCaseInsensitive ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal) >= 0;
    }
}

Và cách sử dụng là một cái gì đó như:

if( "main String substring".Contains("SUBSTRING", true) )
....

6

Sử dụng RegEx là một cách đơn giản để làm điều này:

Regex.IsMatch(title, "string", RegexOptions.IgnoreCase);

4
Câu trả lời của bạn giống hệt như guptat59, nhưng, như đã chỉ ra trong câu trả lời của anh ấy, câu này sẽ khớp với một biểu thức chính quy, vì vậy nếu chuỗi bạn đang kiểm tra có chứa bất kỳ ký tự regex đặc biệt nào thì nó sẽ không mang lại kết quả mong muốn.
Casey

2
Đây là bản sao thẳng của câu trả lời này và chịu những vấn đề tương tự như đã lưu ý trong câu trả lời đó
Liam

Đã đồng ý. Nghiên cứu biểu thức chính quy
Jared

5

Chỉ cần xây dựng câu trả lời ở đây, bạn có thể tạo một phương thức mở rộng chuỗi để làm cho nó thân thiện hơn với người dùng một chút:

    public static bool ContainsIgnoreCase(this string paragraph, string word)
    {
        return CultureInfo.CurrentCulture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0;
    }

1
Giả sử đoạn văn và từ của bạn sẽ luôn ở en-US
Boris Callens

3
Để tránh các vấn đề buộc văn hóa phải en-US, return CultureInfo.CurrentCulture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0;thay vào đó hãy sử dụng .
AndrewWhalan

3

Nếu bạn muốn kiểm tra xem chuỗi đã qua của bạn có nằm trong chuỗi hay không thì có một phương pháp đơn giản cho việc đó.

string yourStringForCheck= "abc";
string stringInWhichWeCheck= "Test abc abc";

bool isContained = stringInWhichWeCheck.ToLower().IndexOf(yourStringForCheck.ToLower()) > -1;

Giá trị boolean này sẽ trả về nếu chuỗi có chứa hay không



2
if ("strcmpstring1".IndexOf(Convert.ToString("strcmpstring2"), StringComparison.CurrentCultureIgnoreCase) >= 0){return true;}else{return false;}

2

Bạn có thể sử dụng string.indexof ()chức năng. Đây sẽ là trường hợp không nhạy cảm


2

Mẹo ở đây là tìm kiếm chuỗi, bỏ qua trường hợp, nhưng để giữ cho nó chính xác như nhau (với cùng một trường hợp).

 var s="Factory Reset";
 var txt="reset";
 int first = s.IndexOf(txt, StringComparison.InvariantCultureIgnoreCase) + txt.Length;
 var subString = s.Substring(first - txt.Length, txt.Length);

Đầu ra là "Đặt lại"


-1
public static class StringExtension
{
    #region Public Methods

    public static bool ExContains(this string fullText, string value)
    {
        return ExIndexOf(fullText, value) > -1;
    }

    public static bool ExEquals(this string text, string textToCompare)
    {
        return text.Equals(textToCompare, StringComparison.OrdinalIgnoreCase);
    }

    public static bool ExHasAllEquals(this string text, params string[] textArgs)
    {
        for (int index = 0; index < textArgs.Length; index++)
            if (ExEquals(text, textArgs[index]) == false) return false;
        return true;
    }

    public static bool ExHasEquals(this string text, params string[] textArgs)
    {
        for (int index = 0; index < textArgs.Length; index++)
            if (ExEquals(text, textArgs[index])) return true;
        return false;
    }

    public static bool ExHasNoEquals(this string text, params string[] textArgs)
    {
        return ExHasEquals(text, textArgs) == false;
    }

    public static bool ExHasNotAllEquals(this string text, params string[] textArgs)
    {
        for (int index = 0; index < textArgs.Length; index++)
            if (ExEquals(text, textArgs[index])) return false;
        return true;
    }

    /// <summary>
    /// Reports the zero-based index of the first occurrence of the specified string
    /// in the current System.String object using StringComparison.InvariantCultureIgnoreCase.
    /// A parameter specifies the type of search to use for the specified string.
    /// </summary>
    /// <param name="fullText">
    /// The string to search inside.
    /// </param>
    /// <param name="value">
    /// The string to seek.
    /// </param>
    /// <returns>
    /// The index position of the value parameter if that string is found, or -1 if it
    /// is not. If value is System.String.Empty, the return value is 0.
    /// </returns>
    /// <exception cref="ArgumentNullException">
    /// fullText or value is null.
    /// </exception>
    public static int ExIndexOf(this string fullText, string value)
    {
        return fullText.IndexOf(value, StringComparison.OrdinalIgnoreCase);
    }

    public static bool ExNotEquals(this string text, string textToCompare)
    {
        return ExEquals(text, textToCompare) == false;
    }

    #endregion Public Methods
}

-4

Cách đơn giản cho người mới:

title.ToLower().Contains("string");//of course "string" is lowercase.

Downvote chỉ là không chính xác. Nếu tiêu đề = StRiNg thì sao? StRiNg! = Chuỗi và StRiNg! =
CHUINGI

Tôi đã sai. Chỉnh sửa câu trả lời như sau, quá đơn giản: <br/> title.ToLower (). Chứa ("chuỗi") // tất nhiên "chuỗi" là chữ thường
O Biên Ldt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.