2010-04-16 20 views
8

¿Alguien puede corregir la expresión a continuación para no permitir también el campo en blanco?Validación de expresiones regulares por correo electrónico

<asp:RegularExpressionValidator ID="expEmail" runat="server" ControlToValidate="txtEmail" ErrorMessage="valid email address required" ValidationExpression="^([a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]){1,70}$"></asp:RegularExpressionValidator> 
+3

Esa expresión no es válida por cierto, por ejemplo, más (+) firma desencadenará un error. – mbillard

+1

Es muy difícil escribir una expresión regular correcta para validar los correos electrónicos. El siguiente enlace se supone que es uno que funciona para todos los correos electrónicos válidos, creo, pero la expresión regular tiene más de 6000 caracteres de largo ... http://www.ex-parrot.com/~pdw/Mail-RFC822-Address. html –

+1

Restringir + realmente me molesta. Significa que no puedes usar filtros de googlemail ... – Ian

Respuesta

11

Agregue un validador de campo requerido también - Creo que el validador de expresiones regulares solo se activará si hay texto en el campo para mirar.

+0

El validador de campo requerido ya se usa en la pregunta. La pregunta que hace el usuario es validar la expresión regular escrita en el validador de campo requerido. –

+0

@Phani Kumar PV - Um, no, no lo es. Pero me hiciste mirar :) – Paddy

+0

No va a funcionar, ya que cada error deja el espacio en la página para la etiqueta por lo que el segundo error se flota sobre la derecha, etc. ¿Alguna solución para esto? – LiamB

18

Una de las soluciones (no un mejor) es la implementación de algunas expresiones regulares:

^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$ 

muestra: [email protected]

Pero, en realidad, es muy difícil de escribir y mantener una buena expresión de validación de correo electrónico. No deberías confiar 100% en tu expresión regular. Usted puede encontrar varios artículos sobre esa dificultad en Internet:

+4

Vea más en http://www.regular-expressions.info/email.html – abatishchev

+1

Hasta ahora, funciona perfectamente para una simple validación de correo electrónico. – webtrifusion

+0

Esto falla con un correo electrónico válido de 'bob_ @ hotmail.com' –

0

Si usted quiere tratar este campo como uno requerido, entonces es mejor ir para RequiredFieldValidator .

<asp:RequiredFieldValidator ID="reqEmail" ControlToValidate="txtEmail" runat="server" ErrorMessage="Email address required"></asp:RequiredFieldValidator> 

Gracias,

1

Necesita utilizar un validador adicional - asp:RequiredFieldValidator

<asp:RequiredFieldValidator runat="server" ControlToValidate="txtEmail" ErrorMessage="Message!" /> 

Cualquiera de ASP.NET 2.0 validadores basados ​​en BaseValidator (excepto en sí RequiredFieldValidator por supuesto) no comprueba campo especificado para estar vacío.

Por cierto, para hacer a medida UserControl poder ser comprobado con este tipo de validadores, utilice

[System.Web.UI.ValidationProperty("PropertyName")] 
1

¿No puedes hacer algo como

if (txtEmail.Text.Trim().length > 0) then 
     validate 

Creo que desde expresiones regulares y no son complejos , cualquier cosa que se pueda hacer fuera de la expresión regular se debe hacer fuera de la expresión regular, esto debería hacer que el código sea más legible, pero eso es solo yo.

Su expresión regular es bastante compleja, here debería encontrar una más simple. De todas formas, lo que puede hacer es algo como esto:^(expresiones regulares) {1} $

0

Otra opción es utilizar .NET CustomValidator, establezca su ValidateEmptyText a verdadera, y para la validación de dirección de correo electrónico puede usar una función de JavaScript que se especificará en ClientValidationFunction propiedad del validador.

0
void Page_Load(Object sender, EventArgs e) 
{ 
    string uNameExpr = "^[a-zA-Z](.{1,9})$"; 
    string phoneExpr = 
     "((\\(\\d{3}\\) ?)|(\\d{3}-))?\\d{3}-\\d{4}"; 

    // Define validation expressions. 
    RegExprVal1.ValidationExpression = uNameExpr; 
    RegExprVal2.ValidationExpression = phoneExpr; 

    ReqFldVal1.Text = "User name is required"; 
    RegExprVal1.Text = "Must be between 2 to 10 characters"; 
    RegExprVal2.Text = "Please provide a valid number: (425) 555-0187"; 
    // ErrorMessages appear in ValidationSummary. 
    RegExprVal1.ErrorMessage = "Incorrect UserName format. Name" + 
     " can be 2 to 10 characters long"; 
    ReqFldVal1.ErrorMessage = "User name required"; 
    RegExprVal2.ErrorMessage = 
     "Please provide a valid number: (000) 000-0000"; 
} 

void OnCmdClick(Object sender, EventArgs e) 
{ 
    if (Page.IsValid) 
    { 
     ActiveForm = Form2; 
    } 
} 
0

Esto se puede hacer con el simple uso de Regex clase en System.Text.RegularExpressions:

private bool ValidateEmail() 
{ 
    string email = txtemail.Text; 
    Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); 
    Match match = regex.Match(email); 
    if (match.Success) 
     return true; 
    else 
     return false; 
} 
+1

¿qué pasa con los dominios .info? Esto destaca por qué las expresiones regulares son malas. También es técnicamente válido, no necesita dot en la última parte, si ejecuta el DNS de un país, puede ser bob @ ly. Luego también puede tener correos electrónicos en subdominios, [email protected] Entonces esta expresión regular no lo cubre. – PlexQ

Cuestiones relacionadas