405 votes

Regex pour les chiffres uniquement

Je n'ai jamais utilisé d'expressions régulières, j'ai donc du mal à trouver une solution. Je veux que l'expression rationnelle ne corresponde que lorsque la chaîne contenue est composée de tous les chiffres, mais dans les deux exemples ci-dessous, elle correspond à une chaîne qui contient tous les chiffres plus un signe égal comme "1234=4321". Je suis sûr qu'il existe un moyen de modifier ce comportement, mais comme je l'ai dit, je n'ai jamais vraiment fait grand-chose avec les expressions régulières.

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{ 
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{ 
    //true
}

Au cas où cela aurait de l'importance, j'utilise C# et .NET2.0.

6 votes

Avez-vous besoin de correspondre numéros o chiffres ? Par exemple : 123.456 est un nombre, mais il n'y a pas que des chiffres.

0 votes

Exactement, l'OP n'est pas totalement clair sur l'utilisation d'entiers ou non.

3 votes

Pourquoi ne pas essayer d'analyser la chaîne de caractères pour ce cas simple ? bool decimal.TryParse(string string, out decimal result) ou bool int.TryParse(string string, out int result)

601voto

Bill the Lizard Points 147311

Utilisez les ancrages de début et de fin.

Regex regex = new Regex(@"^\d$");

Utilisez "^\d+$" si vous devez faire correspondre plus d'un chiffre.


Notez que "\d" correspondra à [0-9] et d'autres caractères numériques comme les chiffres arabes orientaux . Utilisez "^[0-9]+$" pour limiter les résultats aux chiffres arabes 0 à 9.


Si vous avez besoin d'inclure des représentations numériques autres que de simples chiffres (comme des valeurs décimales pour commencer), consultez la rubrique @tchrist 's Guide complet de l'analyse des nombres à l'aide d'expressions régulières .

0 votes

Que diriez-vous d'un nombre fixe de valeurs numériques ? C'est généralement le cas pour les codes postaux de certains pays comme l'Inde. Je suppose qu'il faudra ensuite vérifier la longueur de la chaîne de caractères ?

2 votes

@Najeeb Oui, puisque les codes postaux indiens sont des nombres à 6 chiffres, vous pouvez utiliser quelque chose comme "^\d{6}$" . Certains autres pays ont des règles plus compliquées pour les codes postaux, de sorte que les solutions regex pour plusieurs pays peuvent aussi devenir assez compliquées. Consultez les exemples suivants stackoverflow.com/q/578406/1288

0 votes

Comment se fait-il que si la chaîne d'entrée est quelque chose comme : "3 a", il y a toujours une correspondance ? Quelqu'un sait-il comment je peux faire en sorte qu'elle ne corresponde QUE si elle contient des chiffres, et rien d'autre (à l'exception d'un signe négatif, je suppose). Je l'ai actuellement configuré comme suit : "- ?[0-9]+".

134voto

Robert Gamble Points 41984

Votre regex correspondra à tout ce qui contient un nombre, vous voulez utiliser des ancres pour correspondre à la chaîne entière et ensuite correspondre à un ou plusieurs nombres :

regex = new Regex("^[0-9]+$");

El ^ ancrera le début de la chaîne de caractères, la balise $ ancrera la fin de la chaîne de caractères, et la balise + correspondra à un ou plusieurs éléments de ce qui le précède (un nombre dans ce cas).

53voto

Andy Points 1118

Si vous devez tolérer le point décimal et le marqueur de mille

var regex = new Regex(@"^-?[0-9][0-9,\.]+$");

Vous aurez besoin d'un "-", si le nombre peut être négatif.

0 votes

Florin Ghita. Merci. "-" doit être au début.

3 votes

Cette regex autorise également à tort le signe négatif en tête ( - ) et période ( . ) pour se produire plus d'une fois.

5 votes

Vous pouvez faire - y . facultatif via ? . -?\d+(?:\.\d+)? correspondrait à des nombres entiers ou décimaux. (Les ?: dans les parens fait juste des parens un groupe non capturant et utilisé pour seulement regrouper pour la clarté).

21voto

kasperjj Points 2726

Elle correspond parce qu'elle trouve "une correspondance" et non une correspondance de la chaîne complète. Vous pouvez résoudre ce problème en modifiant votre regexp pour rechercher spécifiquement le début et la fin de la chaîne.

^\d+$

11voto

Mark Brackett Points 46824

^ \d +$, qui correspond à "début de chaîne", "1 ou plusieurs chiffres", "fin de chaîne" en anglais.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X