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.