2009-02-21 23 views
9

Estamos utilizando el siguiente para hacer una validación de correo electrónico en ASP.NET:Correo electrónico Regex: ¿Ignora los espacios iniciales y finales?

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 

¿Cómo se puede modificar para ignorar espacios iniciales y finales?

El recorte real que manejamos en el código en la devolución de datos, pero el validador se activa como no válido si el usuario tiene un espacio adicional a menudo debido a copiar y pegar.

+0

Debe leer esto: http://mail.python.org/pipermail/python-list/2006-September/404146.html – Gumbo

+0

El envío de un mensaje de prueba no es una opción. Debe validarse lo mejor posible en el formulario antes de la presentación. – schooner

Respuesta

4

Simplemente haga el ajuste antes de pasarlo al validador.

+0

Es un validador asp.net vinculado a un cuadro de texto, por lo que no estoy seguro de que sea posible de forma predeterminada. Prefiero que la expresión regular lo maneje si es posible. – schooner

+1

¿Por qué? Los espacios * no * son parte de un correo electrónico válido, por lo que la expresión regular no debería verlos. Recorte el valor con una acción onchange/onsubmit. –

+0

Prefiero esto más que hacerlo en una expresión regular. "[email protected]" no es un correo electrónico válido. Los espacios adicionales están más relacionados con la fuente de datos. Al igual que no validaría un correo electrónico en el DB con la misma expresión regular de correo electrónico que acepta espacios. Si obtiene el correo electrónico de una cadena de consulta, no usará una expresión regular que permita cosas codificadas, primero la decodificará y luego validará. Si están utilizando validadores MVC, entonces están a merced de la ingeniería de MS. Entonces quizás no tengas elección. –

7

Grupo lo que quiere en una captura de llamada y luego permiten espacios antes y después de la captura

\s*(?<email>\w+([-+.']\w+)@\w+([-.]\w+).\w+([-.]\w+)*)\s* 
+2

Para no olvidar "^" y "$". – Tomalak

+1

No funciona con ''. Use '\ s * \ w + ([- +. '] \ W +) * @ \ w + ([-.] \ W +) * \. \ W + ([-.] \ W +) * \ s *' en su lugar. –

13

Puede colocar \s* antes y después de su patrón y debería funcionar correctamente.

+0

Me gustó tu respuesta. Simple y funciona. Gracias. – Sunil

+1

su sugerencia funciona: '\ s * \ w + ([- +. '] \ W +) * @ \ w + ([-.] \ W +) * \. \ W + ([-.] \ W +) * \ s * ' –

+0

Sé que esto es bastante viejo, pero creo que sigue siendo muy relevante hoy. Si el objetivo es generar una expresión regular solo para el correo electrónico ingresado por el usuario sin procesar, entonces creo que esta es la respuesta correcta. Sin embargo, si desea una expresión regular para un correo electrónico válido, esto es incorrecto. En aplicaciones grandes, querrás reutilizar la misma expresión regular en muchas capas, en pequeñas aplicaciones esto funcionaría bien, pero debes saber que no se escala. –

1

En caso de ASP.NET las siguientes obras:

<asp:TextBox runat="server" ID="EmailAddress" /> 
<asp:RegularExpressionValidator ValidationExpression="\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*" runat="server" ControlToValidate="EmailAddress" Text="*" ErrorMessage="Email is not valid" /> 

permite una variedad de mensajes de correo electrónico como:

"[email protected]" 
" [email protected] " 
"[email protected]" 
" [email protected] " 

etc

Asegúrese de que se tira de los espacios en blanco en su código como lo siguiente:

VB Dim Email as string = EmailAddress.Text.Trim()

C# string Email = EmailAddress.Text.Trim();

0

que iba a "respuesta" esto como un simple comentario, pero la verdadera respuesta a su pregunta es que no hay una respuesta.

¿Por qué?

Porque cualquier dirección de correo electrónico con espacio o espacios en blanco antes o después de ella, es dirección de correo electrónico no válida.

Intenta pasar una dirección de correo electrónico con caracteres en blanco alrededor de ella en un control SMPTP por ejemplo, e intente y envíela, ¡fallará!

Todas las direcciones de correo electrónico tienen que ser validado desde el punto de vista de esta expresión regular ...

\ w + ([- + '.] \ W +) @ \ w + ([-]. \ w +) \ w + (. [-.] \ w +) *

o incluso esta

/[email protected]+/

Cualquier otra cosa es una dirección de correo electrónico no válida.

Realmente la forma de hacerlo es CORTAR() la cadena antes de pasar a un control de correo electrónico para usarla.

Solo te advierto.

Cuestiones relacionadas