2010-12-10 70 views
11

Tratando de validar una lista de correo electrónico separadas por comas en el cuadro de texto con asp:RegularExpressionValidator, ver más abajo:¿Cómo hacer coincidir una lista de correos separados por comas con expresiones regulares?

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" 
        runat="server" ErrorMessage="Wrong email format (separate multiple email by comma [,])" ControlToValidate="txtEscalationEmail" 
        Display="Dynamic" ValidationExpression="([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},?)" ValidationGroup="vgEscalation"></asp:RegularExpressionValidator> 

Funciona muy bien cuando lo pruebo en http://regexhero.net/tester/, pero no funciona en mi página.

Aquí es mi entrada de la muestra:

[email protected],[email protected] 

He intentado una sugerencia en this post, pero no pude conseguir que funcione.

p.s. No quiero una discusión sobre la validación de correo electrónico correcta

+0

¿Podría mostrar el código que agrega la expresión regular al validador? –

+0

Regex Hero devuelve dos coincidencias con tu expresión regular original. La solución de Donut brinda solo una coincidencia (como debería ser). Supongo que eso significa que RegularExpressionValidator tiene un comportamiento de coincidencia único en términos de lo que justifica una coincidencia. Tal vez dos partidos paralelos no justifiquen un partido. No debería ser difícil darse cuenta de eso. –

Respuesta

14

Prueba esto:

^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},?)+$ 

Adición de la + después del paréntesis significa que el grupo anterior puede estar presente 1 o más veces.

Agregar ^ y $ significa que cualquier cosa entre el inicio de la cadena y el inicio de la coincidencia (o el final de la coincidencia y el final de la cadena) hace que la validación falle.

+0

dinero fácil, gracias! –

+0

por cierto, ¿sabes por qué funciona sin "+" en el validador en línea? –

+0

@roman m No hay problema, aunque no estoy seguro de por qué hay una diferencia entre el validador en línea y su código original. Me alegro de esto ayudó sin embargo. – Donut

16

Este Regex permitirá correos electrónicos con espacios después de las comas.

^[\W]*([\w+\-.%][email protected][\w\-.]+\.[A-Za-z]{2,4}[\W]*,{1}[\W]*)*([\w+\-.%][email protected][\w\-.]+\.[A-Za-z]{2,4})[\W]*$ 

Jugando con esto, un colega se le ocurrió esta expresión regular que es más precisa. La respuesta anterior parece permitir una lista de direcciones de correo electrónico donde el primer elemento no es una dirección de correo electrónico. Aquí está la actualización que también permite espacios después de las comas.

+0

Esta expresión regular acepta un "." o espacio y cualquier carácter especial al final. Por ejemplo: "[email protected]". –

+1

Esto no permitirá 'matt @ about.museum'. –

+5

Para permitir extensiones de dominio largas, use '^ [\ W] * ([\ w + \ -.%] + @ [\ W \ -.] + \. [A-Za-z] + [\ W] * , {1} [\ W] *) * ([\ w + \ -.%] + @ [\ W \ -.] + \. [A-Za-z] +) [\ W] * $ 'donde simplemente reemplace la restricción {2,4} con un + –

0

La siguiente expresión regular es menos restrictiva y más apropiada para validar una lista de direcciones de correo electrónico separadas por comas. Permite comas adyacentes.

^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4},*[\W]*)+$ 
0

Utilice la siguiente expresión regular, se resolverá el problema. La siguiente expresión regular de correos y entretener a los espacios pre con comas demasiado

/^((([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z\s?]{2,5}){1,25})(\s?,\s*?))$/ 
+0

Esto coincidirá, por ejemplo, '-.-.-.-... @ .......,' No estoy seguro de que sea una dirección de correo electrónico válida – Toto

1
^([a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+,*[\W]*)+$ 

Esto también funciona. Es un poco más estricto en los correos electrónicos, y no es que haya más de una dirección de correo electrónico ingresada o que una coma esté presente.

+0

Se necesita, y; entre correos electrónicos. Necesito que lo haga solo, y no; – Na30m

+0

¿Cómo puedo cambiar esto? – Na30m

0

Llego un poco tarde a la fiesta, lo sé, pero pensé que agregaría mis dos centavos, ya que la respuesta aceptada tiene el problema de emparejar direcciones de correo electrónico una al lado de la otra sin una coma.

Mi expresiones regulares propuesta es la siguiente:

^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,}(,[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,})*$

Es similar a la respuesta aceptada, pero resuelve el problema que estaba hablando. La solución que surgió fue que en lugar de buscar "una dirección de correo electrónico seguida de una coma opcional" una o más veces, que es lo que hace la respuesta aceptada, esta expresión busca "una dirección de correo electrónico seguida de una dirección de correo electrónico con prefijo de coma opcional" cualquier cantidad de veces ".

Esto resuelve el problema agrupando la coma con la dirección de correo electrónico después de ella, y haciendo que todo el grupo sea opcional, en lugar de solo la coma.

Notas: Esta expresión regular está destinado a ser utilizado con la bandera insensibles habilitado.
Puede usar cualquiera de las expresiones regulares para que coincida con una dirección de correo electrónico, simplemente utilicé la que ya estaba usando. Simplemente reemplazará cada [A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,} con la expresión regular que desee utilizar.

0

La primera respuesta que se selecciona como la mejor coincide con la cadena como [email protected]@abc.com que no es válida.

La siguiente expresión regular funcionará para identificadores de correo electrónico separados por comas asombrosamente.

^([\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4})(,[\w+-.%][email protected][\w-.]+\.[A-Za-z]{2,4})*$ 

Emparejará sola EMAILID, separadas por comas EMAILID pero no si se falta una coma.

El primer grupo coincidirá con la cadena de un solo ID de correo electrónico. El segundo grupo es opcionalmente requerido por el token '*', es decir, 0 o más números de dicho grupo, pero se requiere que ',' esté al comienzo de dicho ID de correo electrónico, lo que hace que el ID de correo separado por comas coincida con la expresión regular anterior.

Cuestiones relacionadas