web-dev-qa-db-fra.com

Validation d'un champ de zone de texte pour une entrée numérique uniquement.

J'ai créé un programme à base de formulaire nécessitant une validation des entrées. Je dois m'assurer que l'utilisateur ne peut entrer que des valeurs numériques dans la zone de texte distance.

Jusqu'ici, j'ai vérifié que la zone de texte contient quelque chose, mais si elle a une valeur, il convient de valider que la valeur entrée est numérique:

else if (txtEvDistance.Text.Length == 0)
        {
            MessageBox.Show("Please enter the distance");
        }
else if (cboAddEvent.Text //is numeric)
        {
            MessageBox.Show("Please enter a valid numeric distance");
        }
7
Wizard

Vous pouvez essayer la méthode TryParse qui vous permet d'analyser une chaîne en un entier et de renvoyer un résultat booléen indiquant le succès ou l'échec de l'opération.

int distance;
if (int.TryParse(txtEvDistance.Text, out distance))
{
    // it's a valid integer => you could use the distance variable here
}
17
Darin Dimitrov

Voici un autre simple {solution} _ 

try
{
    int temp=Convert.ToInt32(txtEvDistance.Text);
}
catch(Exception h)
{
    MessageBox.Show("Please provide number only");
}
5
COLD TOLD

Si vous souhaitez empêcher l'utilisateur de saisir des valeurs non numériques au moment de saisir les informations dans la zone de texte, vous pouvez utiliser Event OnKeyPress de la manière suivante:

private void txtAditionalBatch_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar)) e.Handled = true;         //Just Digits
            if (e.KeyChar == (char)8) e.Handled = false;            //Allow Backspace
            if (e.KeyChar == (char)13) btnSearch_Click(sender, e);  //Allow Enter            
        }

Cette solution ne fonctionne pas si l'utilisateur colle les informations dans la zone de texte à l'aide de la souris (clic droit/coller), auquel cas vous devrez ajouter une validation supplémentaire.

5
Somebody

Vous pouvez le faire en javascript côté client ou en utilisant un regex validator dans la zone de texte.

Javascript

script type="text/javascript" language="javascript">
    function validateNumbersOnly(e) {
        var unicode = e.charCode ? e.charCode : e.keyCode;
        if ((unicode == 8) || (unicode == 9) || (unicode > 47 && unicode < 58)) {
            return true;
        }
        else {

            window.alert("This field accepts only Numbers");
            return false;
        }
    }
</script>

Zone de texte (avec ValidationExpression fixe)

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator6" runat="server" Display="None" ErrorMessage="Accepts only numbers." ControlToValidate="TextBox1" ValidationExpression="^[0-9]*$" Text="*"></asp:RegularExpressionValidator> 
4
JAiro

Je suis d'accord avec Int.TryParse, mais vous pouvez aussi utiliser Regex.

 Regex nonNumericRegex = new Regex(@"\D");
 if (nonNumericRegex.IsMatch(txtEvDistance.Text))
 {
   //Contains non numeric characters.
   return false;
 }
2
Oliver

Tu peux faire comme ça

   int outParse;

   // Check if the point entered is numeric or not
   if (Int32.TryParse(txtEvDistance.Text, out outParse) && outParse)
    {
       // Do what you want to do if numeric
    }
   else
    {
       // Do what you want to do if not numeric
    }     
2
Tapan kumar

J'ai cette extension qui est un peu polyvalente:

    public static bool IsNumeric(this object value)
    {
        if (value == null || value is DateTime)
        {
            return false;
        }

        if (value is Int16 || value is Int32 || value is Int64 || value is Decimal || value is Single || value is Double || value is Boolean)
        {
            return true;
        }

        try
        {
            if (value is string)
                Double.Parse(value as string);
            else
                Double.Parse(value.ToString());
            return true;
        }
        catch { }
        return false;
    }

Cela fonctionne pour d'autres types de données. Devrait bien fonctionner pour ce que vous voulez faire.

1
MilkyWayJoe
        if (int.TryParse(txtDepartmentNo.Text, out checkNumber) == false)
        {
            lblMessage.Text = string.Empty;
            lblMessage.Visible = true;
            lblMessage.ForeColor = Color.Maroon;
            lblMessage.Text = "You have not entered a number";
            return;
        }
1
Yannick Katambo

Voici une solution qui autorise uniquement le numérique avec un signe moins ou une décimale avec un signe moins et un point décimal. La plupart des réponses précédentes ne prenaient pas en compte le texte sélectionné. Si vous attribuez la valeur false à ShortcutsEnabled de votre zone de texte, vous ne pouvez pas non plus coller de déchets dans votre zone de texte (cela désactive le clic droit). Certaines solutions vous permettaient d'entrer des données avant le moins. S'il vous plaît vérifier que j'ai tout attrapé!

        private bool DecimalOnly_KeyPress(TextBox txt, bool numeric, KeyPressEventArgs e)
        {
            if (numeric)
            {
                // Test first character - either text is blank or the selection starts at first character.
                if (txt.Text == "" || txt.SelectionStart == 0)
                {
                    // If the first character is a minus or digit, AND
                    // if the text does not contain a minus OR the selected text DOES contain a minus.
                    if ((e.KeyChar == '-' || char.IsDigit(e.KeyChar)) && (!txt.Text.Contains("-") || txt.SelectedText.Contains("-")))
                        return false;
                    else
                        return true;
                }
                else
                {
                    // If it's not the first character, then it must be a digit or backspace
                    if (char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back))
                        return false;
                    else
                        return true;
                }
            }
            else
            {
                // Test first character - either text is blank or the selection starts at first character.
                if (txt.Text == "" || txt.SelectionStart == 0)
                {
                    // If the first character is a minus or digit, AND
                    // if the text does not contain a minus OR the selected text DOES contain a minus.
                    if ((e.KeyChar == '-' || char.IsDigit(e.KeyChar)) && (!txt.Text.Contains("-") || txt.SelectedText.Contains("-")))
                        return false;
                    else
                    {
                        // If the first character is a decimal point or digit, AND
                        // if the text does not contain a decimal point OR the selected text DOES contain a decimal point.
                        if ((e.KeyChar == '.' || char.IsDigit(e.KeyChar)) && (!txt.Text.Contains(".") || txt.SelectedText.Contains(".")))
                            return false;
                        else
                            return true;
                    }
                }
                else
                {
                    // If it's not the first character, then it must be a digit or backspace OR
                    // a decimal point AND
                    // if the text does not contain a decimal point or the selected text does contain a decimal point.
                    if (char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back) || (e.KeyChar == '.' && (!txt.Text.Contains(".") || txt.SelectedText.Contains("."))))
                        return false;
                    else
                        return true;
                }

            }
        }
1
lianaent

Pour vérifier si la valeur est un double:

private void button1_Click(object sender, EventArgs e)
{

    if (!double.TryParse(textBox1.Text, out double myX))
    {
        System.Console.WriteLine("it's not a double ");
        return;
    }
    else 
        System.Console.WriteLine("it's a double ");
}
0
Wajdi Gharsalli