c# validation textbox

c# - Validar un campo de cuadro de texto para solo entrada numérica.



validation textbox (10)

Puede probar el método TryParse que le permite analizar una cadena en un entero y devolver un resultado booleano que indica el éxito o el fracaso de la operación.

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

Creé un programa basado en formularios que necesita una validación de entrada. Necesito asegurarme de que el usuario solo pueda ingresar valores numéricos dentro de la distancia de Textbox.

Hasta ahora, he comprobado que Textbox tiene algo, pero si tiene un valor, entonces debe proceder a validar que el valor ingresado es numérico:

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"); }


Si desea evitar que el usuario ingrese valores no numéricos en el momento de ingresar la información en el cuadro de texto, puede usar el evento OnKeyPress de esta manera:

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 }

Esta solución no funciona si el usuario pega la información en el TextBox con el mouse (clic derecho / pega), en ese caso debe agregar una validación adicional.


Tengo esta extensión que es un poco polivalente:

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; }

Funciona para otros tipos de datos. Debería funcionar bien para lo que quieres hacer.


Puedes hacerlo de esta manera

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 }


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; }


Aquí hay una solución que permite, ya sea numérico solo con un signo menos o decimal con un signo menos y punto decimal. La mayoría de las respuestas anteriores no tuvieron en cuenta el texto seleccionado. Si cambia los accesos directos de su cuadro de texto habilitados a falso, entonces no puede pegar basura en su cuadro de texto tampoco (desactiva el clic derecho). Algunas soluciones le permitieron ingresar datos antes del signo menos. Por favor, verifique que lo he capturado todo!

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; } } }


Estoy de acuerdo con Int.TryParse, pero como alternativa podría usar Regex.

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


si quieres verificar si es doble:

private void button1_Click (object remitente, EventArgs e) {

enter code here private void button1_Click(object sender, EventArgs e){double myX; if (!double.TryParse(textBox1.Text, out myX)){ System.Console.WriteLine("it''s not a double "); return; } else System.Console.WriteLine("it''s a double ");

}


Aquí hay otra solución simple

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


Puede hacerlo mediante javascript en el lado del cliente o utilizando algún validador de expresiones regulares en el cuadro de texto.

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>

Textbox (con ValidationExpression fijo)

<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>