C# Controllo stringa Contains senza distinzione tra maiuscole e minuscole
- Metodo 1: Utilizzo del metodo C#
string.IndexOf()
. - Metodo 2: Utilizzo del metodo
string.Contains()
in .Net 5+ & .NET Core 2.0+ - Metodo 3: Utilizzo del metodo
Regex.IsMatch()
- Metodo 4: Usare
.ToUpper()
&.ToLower()
- C# Controllo dei contenuti senza distinzione di maiuscole e minuscole per altre lingue
- Il modo migliore per fare un controllo insensibile alle maiuscole e ai minuscoli
On this page
- Metodo 1: Utilizzo del metodo C#
string.IndexOf()
. - Metodo 2: Utilizzo del metodo
string.Contains()
in .Net 5+ & .NET Core 2.0+ - Metodo 3: Utilizzo del metodo
Regex.IsMatch()
- Metodo 4: Usare
.ToUpper()
&.ToLower()
- C# Controllo dei contenuti senza distinzione di maiuscole e minuscole per altre lingue
- Il modo migliore per fare un controllo insensibile alle maiuscole e ai minuscoli
In questo tutorial impariamo diversi modi per fare il controllo delle stringhe contenenti senza distinzione tra maiuscole e minuscole in C#
Sembra un problema semplice, ma il metodo predefinito di C# string.Contains()
è case sensitive
E se la stringa non è in lingua inglese, cioè in altre lingue, non è possibile confrontare direttamente il testo senza distinzione tra maiuscole e minuscole
Le due stringhe devono essere della stessa cultura e dobbiamo conoscere la cultura della lingua.
Nella maggior parte dei casi si confrontano solo stringhe in lingua inglese.
Metodo 1: Utilizzo del metodo C# string.IndexOf()
.
È possibile utilizzare il metodo C# string.IndexOf()
per eseguire il controllo del contenuto delle stringhe senza distinzione tra maiuscole e minuscole.
IndexOf()
il metodo accetta il parametro StringComparison.OrdinalIgnoreCase
, che specifica il tipo di ricerca da utilizzare per i caratteri.
string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
Metodo 2: Utilizzo del metodo string.Contains()
in .Net 5+ & .NET Core 2.0+
Nelle ultime versioni di dot net, ovvero in .Net Core 2.0+ e .Net 5+. Il metodo string.Contains()
ha un metodo sovraccaricato che accetta il parametro StringComparison
.
string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);
Metodo 3: Utilizzo del metodo Regex.IsMatch()
È possibile utilizzare le espressioni regolari per effettuare un controllo delle stringhe contenenti senza distinzione tra maiuscole e minuscole.
Se si ha familiarità con Regex
, utilizzare il metodo Regex.IsMatch()
e per verificare l’assenza di maiuscole e minuscole passare il parametro RegexOptions.IgnoreCase
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);
//true
Metodo 4: Usare .ToUpper()
& .ToLower()
Se le stringhe sono in lingua inglese e le prestazioni non sono un problema, possiamo convertire entrambe le stringhe nello stesso caso e poi eseguire il controllo del contenuto delle stringhe.
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = stringToSearch.ToLower().Contains(substring.ToLower());
or
bool contains = stringToSearch.ToUpper().Contains(substring.ToUpper());
//true
C# Controllo dei contenuti senza distinzione di maiuscole e minuscole per altre lingue
L’insensibilità alle maiuscole dipende dalla lingua
Ad esempio, nella lingua inglese I
è la versione maiuscola di i
.
Mentre nella lingua turca la versione maiuscola di i
è il carattere sconosciuto İ
.
Per effettuare il controllo delle stringhe senza distinzione tra maiuscole e minuscole, è necessario utilizzare l’oggetto CultureInfo
.
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
Ho creato l’oggetto CultureInfo
per la lingua turca. E ho confrontato entrambe le stringhe utilizzando CompareInfo
come mostrato di seguito.
trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
Il modo migliore per fare un controllo insensibile alle maiuscole e ai minuscoli
Se si utilizza l’ultima versione di .Net
, utilizzare il metodo string.Contains()
.
Altrimenti utilizzare il metodo string.IndexOf()
.
Non preferite i metodi .ToUpper()
o To.Lower()
perché potrebbero causare problemi di prestazioni.
Usare l’oggetto CultureInfo
per le stringhe di altre lingue.