web-dev-qa-db-fra.com

Regex qui accepte uniquement les nombres (0-9) et NO caractères

J'ai besoin d'une expression régulière qui acceptera uniquement les chiffres de 0 à 9 et rien d'autre. Pas de lettres, pas de caractères.

Je pensais que cela fonctionnerait:

^[0-9]

ou même

\d+

mais ceux-ci acceptent les caractères: ^, $, (,), etc.

Je pensais que les deux expressions rationnelles ci-dessus feraient l'affaire et je ne suis pas sûr de savoir pourquoi il accepte ces caractères.

MODIFIER:

C'est exactement ce que je fais:

 private void OnTextChanged(object sender, EventArgs e)
    {

   if (!System.Text.RegularExpressions.Regex.IsMatch("^[0-9]", textbox.Text))
        {
            textbox.Text = string.Empty;
        }
    }

Cela permet aux personnages que j'ai mentionnés ci-dessus.

123
mo alaz

Votre regex ^[0-9] correspond à tout commençant par avec un chiffre, y compris les chaînes telles que "1A". Pour éviter une correspondance partielle, ajoutez un $ à la fin:

^[0-9]*$

Ceci accepte n'importe quel nombre de chiffres, y compris aucun. Pour accepter un ou plusieurs chiffres, remplacez le * par +. Pour accepter exactement un chiffre, supprimez simplement le *.

UPDATE: Vous avez mélangé les arguments de IsMatch. Le modèle devrait être le deuxième argument, pas le premier:

if (!System.Text.RegularExpressions.Regex.IsMatch(textbox.Text, "^[0-9]*$"))

ATTENTION: En JavaScript, \d équivaut à [0-9], mais en .NET, \d correspond par défaut à any chiffre décimal Unicode , y compris les plats exotiques comme (Myanmar 2) et (N'Ko 9). Sauf si votre application est prête à gérer ces caractères, restez fidèle à [0-9] (ou indiquez le drapeau RegexOptions.ECMAScript ).

303
Michael Liu