OVH Cloud OVH Cloud

test de numéricité d'une chaine ?

3 réponses
Avatar
Benoit
Bonjour,

Je cherche à tester simplement la numéricité d'une chaine de caractère en
C#. Je pensais qu'il existait une classe équivalente à Convert qui propose
de tester la validité de différents types (numérique, date...), mais je ne
trouve rien.

Merci d'avance.

3 réponses

Avatar
Lionel LASKE
Il y a tout ce que tu cherches dans System.Convert: ToDateTime, ToInt32, ...
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemconvertclasstodatetimetopic10.asp)
L'idée est d'essayer de faire la conversion est de récupérer l'exception
InvalidCastException pour s'assurer que la conversion s'est bien passée.

Lionel.


"Benoit" a écrit dans le message de news:
%
Bonjour,

Je cherche à tester simplement la numéricité d'une chaine de caractère en
C#. Je pensais qu'il existait une classe équivalente à Convert qui propose
de tester la validité de différents types (numérique, date...), mais je ne
trouve rien.

Merci d'avance.




Avatar
Benoit
Oui effectivement, mais je ne désire pas tester la validité d'une chaine en
effectuant une conversion et gérer l'exception correspondante...
Je suis plutôt à la recherche d'une fonction équivalente à ce qui existait
sous vb6 : isNumeric(...) qui retournait un booléen.

En général, lorsque je fais un traitement de récupération de données, je
contrôle en premier la pertinence et selon le résultat, j'adapte le
traitement. Si je dois passer par des exceptions, cela complique
sérieusement le code.

Benoît.




"Lionel LASKE" a écrit dans le message de news:
%

Il y a tout ce que tu cherches dans System.Convert: ToDateTime, ToInt32,
...
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemconvertclasstodatetimetopic10.asp)
L'idée est d'essayer de faire la conversion est de récupérer l'exception
InvalidCastException pour s'assurer que la conversion s'est bien passée.

Lionel.


"Benoit" a écrit dans le message de news:
%
Bonjour,

Je cherche à tester simplement la numéricité d'une chaine de caractère en
C#. Je pensais qu'il existait une classe équivalente à Convert qui
propose de tester la validité de différents types (numérique, date...),
mais je ne trouve rien.

Merci d'avance.








Avatar
Zoury
Bonjour!

Je suis plutôt à la recherche d'une fonction équivalente à ce qui existait
sous vb6 : isNumeric(...) qui retournait un booléen.



IsNumeric() n'était pas la solution idéale :
http://groups.google.com/groups?threadm=uvk9PbzHFHA.580%40TK2MSFTNGP15.phx.gbl


La fonction IsDigitOnly() montrée dans le liens ci-haut peut-être transcrite
en CSharp en employant les expressions régulières :
//***
using System;
using System.Text.RegularExpressions;

namespace ConsoleArgsProject
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine(IsDigitOnly(""));
Console.WriteLine(IsDigitOnly("123"));
Console.WriteLine(IsDigitOnly("aaa"));
Console.WriteLine(IsDigitOnly("a1a"));

Console.WriteLine();
Console.WriteLine("Press Enter to quit...");
Console.ReadLine();
}

static bool IsDigitOnly(string text)
{
return Regex.IsMatch(text, "^d+$");
}
}
}
//***


En général, lorsque je fais un traitement de récupération de données, je
contrôle en premier la pertinence et selon le résultat, j'adapte le
traitement. Si je dois passer par des exceptions, cela complique
sérieusement le code.



C'est souvent en voulant éviter de déclencher des exceptions que l'on
complique le code... Un truc efficace dans un cas semblable, est d'isolé
dans une fonction la validation qui déclenche une exception. :
ex de fonction effectuant une validation via une exception :
//***
bool IsNumeric(string text)
{
try
{
Int32 i = Int32.Parse(text);
}
catch (Exception ex)
{
return false;
}
return true;
}
//***

Ainsi le code appelant le test reste très lisible :
//***
if (IsNumeric(textbox1.Text))
// placer code ici
//***

--
Cordialement
Yanick
MVP pour Visual Basic