2010-10-12 7 views
1

Je me demande comment implémenter l'analyse stricte d'une chaîne en C#.C# Strict Int/Float analyse

Spécifiquement, je veux exiger que la chaîne contienne juste le nombre (dans le format spécifique à la culture), et aucun autre caractère.

"1.0" -> 1.0 
"1.5 " -> fail 
" 1.5" -> fail 
" 1,5" -> fail (if culture is with ".") 
"1,5" -> fail 

Cheers!

+0

Pourquoi "1.5" échoue-t-il? –

+0

à cause d'espaces – jcolebrand

Répondre

4

La méthode Int32.Parse accepte les drapeaux couvrant certaines situations que vous mentionnez. Ont regardé into MSDN here sur NumberStyles énumération. En outre, il accepte les informations de formatage spécifiques à la culture.

+1

Ou dans cet exemple spécifique, Float.Parse ou Decimal.Parse. Chacune de ces méthodes acceptera un objet IFormatProvider. Vous devriez pouvoir passer System.Globalization.CultureInfo.CurrentUICulture.NumberFormat directement dans Parse. Pas sûr des espaces blancs, il peut automatiquement couper. Je ne sais pas pourquoi ce serait un problème, mais ce n'est pas mon programme. =) – Chuck

+0

'NumberStyles' est exactement ce qui fournit le support pour (dis) autoriser les espaces de fin/de début. –

2

Vérifiez les Parse/TryParse méthodes des int, float et double types. Ils ont overloads qui permettent de spécifier un CultureInfo et permettent de restreindre le format numérique accepté:

string value = "1345,978"; 
NumberStyles style = NumberStyles.AllowDecimalPoint; 
CultureInfo culture = CultureInfo.CreateSpecificCulture("fr-FR"); 
double number; 

if (double.TryParse(value, style, culture, out number)) 
    Console.WriteLine("Converted '{0}' to {1}.", value, number); 
else 
    Console.WriteLine("Unable to convert '{0}'.", value); 
0

TryParse permet spécifiquement les espaces avant et après le nombre Double.TryParse reference, il est donc pas assez strictes pour vos besoins sauf si vous utilisez explicitement NumberStyles.