OVH Cloud OVH Cloud

Pb avec une expression régulière

3 réponses
Avatar
Expression régulière
J'essaye de d=E9finir tr=E8s simplement une expression=20
r=E9guli=E8re qui me permet de v=E9rifier que la chaine pass=E9e=20
en param=E8tre ne contient que des chiffres. Voici ma=20
m=E9thode :

static public bool isChaineNumerique(string sPar_Chaine)
{
System.Text.RegularExpressions.Regex oLocal_Regex;
bool bLocal_ValeurRetour =3D false;
oLocal_Regex =3D new Regex(@"[0-9]");
if (oLocal_Regex.IsMatch(sPar_Chaine)=3D=3Dtrue)
{
bLocal_ValeurRetour =3D true;
}

return bLocal_ValeurRetour;
}

Or cela ne marche pas.=20
Si je saisi "12ab" cette m=E9thode me retourne true.

D'ou vient l'erreur ?

Merci d'avance.

3 réponses

Avatar
Patrick Philippot
Expression régulière wrote:
J'essaye de définir très simplement une expression
régulière qui me permet de vérifier que la chaine passée
en paramètre ne contient que des chiffres. Voici ma
méthode :

static public bool isChaineNumerique(string sPar_Chaine)
{
System.Text.RegularExpressions.Regex oLocal_Regex;
bool bLocal_ValeurRetour = false;
oLocal_Regex = new Regex(@"[0-9]");
if (oLocal_Regex.IsMatch(sPar_Chaine)==true)
{
bLocal_ValeurRetour = true;
}

return bLocal_ValeurRetour;
}

Or cela ne marche pas.
Si je saisi "12ab" cette méthode me retourne true.

D'ou vient l'erreur ?



Bonjour,

Il n'y a pas d'erreur et ça marche :-)).

Il y a bien dans votre chaîne une sous-chaîne correspondant à un digit:
"1" ou "2". Si vous voulez que l'expression régulière corresponde à la
totalité de la chaîne et que celle-ci ne soit composée que de digits,
écrivez: "^[0-9]*$" ou plutôt "^d*$"

Quand vous écrivez "[0-9]", vous spécifiez que vous recherchez une
sous-chaîne composée de 1 digit. Dans votre chaîne de test, il y a en a
deux, "1" et "2".

Il va falloir relire la doc et vous former aux expressions régulières
avec des outils comme Expresso par exemple (http://www.ultrapico.com/)
ou Regular Expression designer
(http://www.radsoftware.com.au/regexdesigner/) :-) .

Bon courage.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Stéphane ANDRE
Merci beaucoup !

-----Message d'origine-----
Expression régulière wrote:
J'essaye de définir très simplement une expression
régulière qui me permet de vérifier que la chaine passée
en paramètre ne contient que des chiffres. Voici ma
méthode :

static public bool isChaineNumerique(string sPar_Chaine)
{
System.Text.RegularExpressions.Regex oLocal_Regex;
bool bLocal_ValeurRetour = false;
oLocal_Regex = new Regex(@"[0-9]");
if (oLocal_Regex.IsMatch(sPar_Chaine)==true)
{
bLocal_ValeurRetour = true;
}

return bLocal_ValeurRetour;
}

Or cela ne marche pas.
Si je saisi "12ab" cette méthode me retourne true.

D'ou vient l'erreur ?



Bonjour,

Il n'y a pas d'erreur et ça marche :-)).

Il y a bien dans votre chaîne une sous-chaîne


correspondant à un digit:
"1" ou "2". Si vous voulez que l'expression régulière


corresponde à la
totalité de la chaîne et que celle-ci ne soit composée que


de digits,
écrivez: "^[0-9]*$" ou plutôt "^d*$"

Quand vous écrivez "[0-9]", vous spécifiez que vous


recherchez une
sous-chaîne composée de 1 digit. Dans votre chaîne de


test, il y a en a
deux, "1" et "2".

Il va falloir relire la doc et vous former aux expressions


régulières
avec des outils comme Expresso par exemple


(http://www.ultrapico.com/)
ou Regular Expression designer
(http://www.radsoftware.com.au/regexdesigner/) :-) .

Bon courage.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr


.



Avatar
Patrick Philippot
Stéphane ANDRE wrote:
Merci beaucoup !



De rien. Précision: si j'écris ^d*$, la chaîne vide est acceptée. Si
vous voulez au moins un digit, il faut écrire ^d+$ .

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr