C# Case insensitive Contains -merkkijonon tarkistus
Tässä opetusohjelmassa opimme eri tapoja tehdä case insensitive string contains check C#:ssa
Se näyttää yksinkertaiselta ongelmalta, mutta C#:n string.Contains()
-menetelmä on oletusarvoisesti isojen ja pienten kirjainten suhteen herkkä
Ja jos merkkijono ei ole englanninkielinen eli muilla kielillä, emme voi verrata tekstiä tapauskohtaisesti suoraan
Molempien merkkijonojen pitäisi olla samassa kulttuurissa ja meidän pitäisi tietää kielikulttuuri.
Useimmiten vertaamme vain englanninkielisiä merkkijonoja.
Menetelmä 1: Käyttämällä C# string.IndexOf()
-menetelmää.
Voimme käyttää C# string.IndexOf()
-menetelmää tehdäksemme isojen ja pienten kirjainten erottelemattoman merkkijonon sisällön tarkistuksen.
IndexOf()
metodi hyväksyy parametrin StringComparison.OrdinalIgnoreCase
, jolla määritetään merkkien hakutyyppi.
string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
Menetelmä 2: string.Contains()
-menetelmän käyttäminen .Net 5+ ja .NET Core 2.0+ -ohjelmissa
Uusimmissa dot net -versioissa eli .Net Core 2.0+:ssa ja .Net 5+:ssa. string.Contains()
-metodilla on ylikuormitettu metodi, joka hyväksyy parametrin StringComparison
.
string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);
Menetelmä 3: Regex.IsMatch()
-metodin käyttäminen
Voimme käyttää säännöllisiä lausekkeita tehdäksemme isoja ja pieniä kirjaimia erittelemättömän contains-merkkijonon tarkistuksen.
Jos tunnet Regex
, käytä Regex.IsMatch()
-menetelmää ja tarkistaaksesi, ettei isoja ja pieniä kirjaimia huomioida, anna RegexOptions.IgnoreCase
-parametri
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);
//true
Menetelmä 4: Käyttämällä .ToUpper()
& .ToLower()
Jos merkkijonot ovat englanninkielisiä ja suorituskyky ei ole ongelma, voimme muuntaa molemmat merkkijonot samaan tapaukseen ja tehdä sitten merkkijonon sisältötarkistuksen.
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = stringToSearch.ToLower().Contains(substring.ToLower());
or
bool contains = stringToSearch.ToUpper().Contains(substring.ToUpper());
//true
C# Case insensitive Contains -tarkistus muille kielille
Isojen ja pienten kirjainten tunnistamattomuus on kieliriippuvainen
Esimerkiksi englannin kielessä I
on i
isolla alkukirjaimella kirjoitettu versio.
Turkkilaisessa kielessä taas i
:n suuraakkosellinen versio on tuntematon merkki İ
.
Jos haluamme tarkistaa merkkijonon ilman isoja ja pieniä kirjaimia, meidän on käytettävä CultureInfo
-objektia.
var text = "İ";
var check = "i";
CultureInfo trCulture = new CultureInfo("tr-TR",false);
bool englishContains = text.IndexOf(check, StringComparison.OrdinalIgnoreCase) >= 0;
//false
var turkishContains = trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
//true
Olen luonut CultureInfo
-objektin turkkilaista kieltä varten. Ja verrannut molempia merkkijonoja käyttäen CompareInfo
alla olevan kuvan mukaisesti.
trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
Paras tapa tehdä Case-erottelematon Contains merkkijonon tarkistus
Jos käytät .Net
:n uusinta versiota, käytä string.Contains()
-menetelmää.
Muussa tapauksessa käytä string.IndexOf()
-menetelmää.
Älä suosi .ToUpper()
tai To.Lower()
-menetelmää, koska ne voivat aiheuttaa suorituskykyongelmia.
Käytä CultureInfo
-objektia muiden kielten merkkijonoille.