Un buen tutorial para iniciarse en el manejo de expresiones regulares lo podemos encontrar en Desarrolloweb. Para realizar el ejemplo siguiente no hay porque conocer en profundidad su manejo. A continuación muestro una serie de tablas a modo de chuleta para que podamos utilizarlas con un simple corta y pega.
La tabla siguiente contiene los caracteres especiales de las expresiones regulares.
| Carácter | Texto buscado |
|---|---|
| ^ | Principio de entrada o línea. |
| $ | Fin de entrada o línea. |
| * | El carácter anterior 0 o más veces. |
| + | El carácter anterior 1 o más veces. |
| ? | El carácter anterior una vez como máximo (es decir, indica que el carácter anterior es opcional). |
| . | Cualquier carácter individual, salvo el de salto de línea. |
| x|y | x o y. |
| {n} | Exactamente n apariciones del carácter anterior. |
| {n,m} | Como mínimo n y como máximo m apariciones del carácter anterior. |
| [abc] | Cualquiera de los caracteres entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [a-f] es equivalente a [abcdef]). |
| [^abc] | Cualquier carácter que no esté entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [^a-f] es equivalente a [^abcdef]). |
| \b | Límite de palabra (como un espacio o un retorno de carro). |
| \B | Cualquiera que no sea un límite de palabra. |
| \d | Cualquier carácter de dígito. Equivalente a [0-9]. |
| \D | Cualquier carácter que no sea de dígito. Equivalente a [^0-9]. |
| \f | Salto de página. |
| \n | Salto de línea. |
| \r | Retorno de carro. |
| \s | Cualquier carácter individual de espacio en blanco (espacios, tabulaciones, saltos de página o saltos de línea). |
| \S | Cualquier carácter individual que no sea un espacio en blanco. |
| \t | Tabulación. |
| \w | Cualquier carácter alfanumérico, incluido el de subrayado. Equivalente a [A-Za-z0-9_]. |
| \W | Cualquier carácter que no sea alfanumérico. Equivalente a [^A-Za-z0-9_]. |
| Cualquier letra en minuscula | [a-z] |
| Entero | ^(?:\+|-)?\d+$ |
| Correo electrónico | /[\w-\.]{3,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/ |
| URL | ^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$ |
| Contraseña segura | (?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$(Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y no puede contener caracteres espaciales) |
| Fecha | ^\d{1,2}\/\d{1,2}\/\d{2,4}$(Por ejemplo 01/01/2007) |
| Hora | ^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$(Por ejemplo 10:45:23) |
| Número tarjeta de crédito | ^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$ |
| Número teléfono | ^[0-9]{2,3}-? ?[0-9]{6,7}$ |
| Código postal | ^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$ |
| Certificado Identificación Fiscal | ^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z](-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?[A-Z])$ |
| Valida sólo números del 1 al 12 (ideal para meses) | ^([0-1]?[0-2]|[0-9])$ |
| Valida de 0.1 a 9.9 | ^([0-9].[1-9])$ |
| Valida desde 10.01 hasta 99.99 con 2 decimales máximo | ^[0-9][0-9](.[0-9][0-9])$ |
| Valida desde 0.01 hasta 99.99 con sólo 2 decimales máximo | ^[0-9]?[0-9](.[0-9][0-9])$ |
private void txtcodigo_KeyUp(object sender, KeyEventArgs e)
{
if (es_numero(txtcodigo))
{
errorProvider1.SetError(txtcodigo, String.Empty);
txtcodigo.BackColor = Color.Honeydew;
}
else
{
errorProvider1.SetError(txtcodigo, "Solo numeros");
txtcodigo.BackColor = Color.MistyRose;
}
}
private void txtemail_KeyUp(object sender, KeyEventArgs e)
{
if (es_email(txtemail))
{
errorProvider1.SetError(txtemail, String.Empty);
txtemail.BackColor = Color.Honeydew;
}
else
{
errorProvider1.SetError(txtemail, "ejemplo@ejemplo.com");
txtemail.BackColor = Color.MistyRose;
}
}
private void txtnombre_KeyUp(object sender, KeyEventArgs e)
{
if (es_cadena(txtnombre))
{
errorProvider1.SetError(txtnombre, String.Empty);
txtnombre.BackColor = Color.Honeydew;
}
else
{
errorProvider1.SetError(txtnombre, "Solo letras");
txtnombre.BackColor = Color.MistyRose;
}
}
private void txttelf_KeyUp(object sender, KeyEventArgs e)
{
if (es_telefono(txttelf))
{
errorProvider1.SetError(txttelf, String.Empty);
txttelf.BackColor = Color.Honeydew;
}
else
{
errorProvider1.SetError(txttelf, "Formato: 999-9999");
txttelf.BackColor = Color.MistyRose;
}
}
private void txtweb_KeyUp(object sender, KeyEventArgs e)
{
if (es_url(txtweb))
{
errorProvider1.SetError(txtweb, String.Empty);
txtweb.BackColor = Color.Honeydew;
}
else
{
errorProvider1.SetError(txtweb, "www.example.com");
txtweb.BackColor = Color.MistyRose;
}
}
private void txtsueldo_KeyUp(object sender, KeyEventArgs e)
{
if (es_decimal(txtsueldo))
{
errorProvider1.SetError(txtsueldo, String.Empty);
txtsueldo.BackColor = Color.Honeydew;
}
else
{
errorProvider1.SetError(txtsueldo, "Formato: 00,00");
txtsueldo.BackColor = Color.MistyRose;
}
}
private static bool es_numero(Control mitextbox)
{
Regex regex = new Regex(@"^[0-9]+$");
return regex.IsMatch(mitextbox.Text);
}
private static bool es_cadena(Control mitextbox)
{
Regex regex = new Regex(@"^[^ ][a-zA-Z ]+[^ ]$");
return regex.IsMatch(mitextbox.Text);
}
private static bool es_telefono(Control mitextbox)
{
Regex regex = new Regex(@"^([0-9]{3})[-. ]?([0-9]{4})$");
return regex.IsMatch(mitextbox.Text);
}
private static bool es_decimal(Control mitextbox)
{
Regex regex = new Regex(@"^[0-9]{1,9}([\.\,][0-9]{1,3})?$");
return regex.IsMatch(mitextbox.Text);
}
private static bool es_url(Control mitextbox)
{
Regex regex = new Regex(@"^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$");
return regex.IsMatch(mitextbox.Text);
}
private static bool es_email(Control mitextbox)
{
Regex regex = new Regex(@"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$");
// Resultado:
// Valid: david.jones@proseware.com
// Valid: d.j@server1.proseware.com
// Valid: jones@ms1.proseware.com
// Invalid: j.@server1.proseware.com
// Invalid: j@proseware.com9
// Valid: js#internal@proseware.com
// Valid: j_9@[129.126.118.1]
// Invalid: j..s@proseware.com
// Invalid: js*@proseware.com
// Invalid: js@proseware..com
// Invalid: js@proseware.com9
// Valid: j.s@server1.proseware.com
return regex.IsMatch(mitextbox.Text);
}
Este codigo va para el boton Nuevo
txtcodigo.Text = String.Empty;
txtcodigo.BackColor = Color.White;
errorProvider1.SetError(txtcodigo,String.Empty);
txtnombre.Text = String.Empty;
txtnombre.BackColor = Color.White;
errorProvider1.SetError(txtnombre, String.Empty);
txttelf.Text = String.Empty;
txttelf.BackColor = Color.White;
errorProvider1.SetError(txttelf, String.Empty);
txtweb.Text = String.Empty;
txtweb.BackColor = Color.White;
errorProvider1.SetError(txtweb, String.Empty);
txtemail.Text = String.Empty;
txtemail.BackColor = Color.White;
errorProvider1.SetError(txtemail, String.Empty);
txtsueldo.Text = String.Empty;
txtsueldo.BackColor = Color.White;
errorProvider1.SetError(txtsueldo, String.Empty);y este codigo va en el boton Grabar
if (es_numero(txtcodigo) == true && es_cadena(txtnombre) == true && es_telefono(txttelf) == true &&
es_url(txtweb) == true && es_email(txtemail) == true && es_decimal(txtsueldo) == true)
{
MessageBox.Show("OK");
}
else
{
MessageBox.Show("Complete todos los campos.");
}


0 comentarios:
Publicar un comentario