c# - studio - Regex para validar múltiples direcciones de correo electrónico
validar expresiones regulares c# (10)
¿Por qué no simplemente dividir en el punto y coma y luego validar cada dirección de correo electrónico potencial usando su expresión regular existente? Escribir una enorme expresión regular será muy difícil y una pesadilla de mantenimiento, sospecho.
Obtuve un Regex que valida mis direcciones de correo como esta:
([a-zA-Z0-9_/-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)|(([a-zA-Z0-9/-]+/.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(/]?)
Esto funciona perfectamente bien, pero solo permite ingresar un correo electrónico. Ahora quería extender eso y permitir que se agreguen múltiples direcciones de correo (como MS Outlook, por ejemplo) con un punto y coma como separador de correo.
[email protected];[email protected];[email protected]
Ahora he buscado y encontrado este:
([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,4}(;|$))
Esto funciona en un punto, pero lamentablemente requiere un punto y coma al final de un correo:
Esto no es lo que quiero cuando el usuario solo ingresa un correo electrónico.
¿Cómo puedo extender mi expresión regular anterior (la primera) para permitir que se agreguen varias direcciones de correo y se dividan a través de un punto y coma?
A continuación se muestra mi solución y funcionó como se esperaba para mí:
var emailReg = new RegExp(/^([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[A-Z]{2,6})*([,;][/s]*([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[A-Z]{2,6}))*$/i);
var emailText = $(''#email'').val();
if (!emailReg.test(emailText)) {
alert(''Wrong Email Address/Addresses format! Please reEnter correct format'');
return false;
}
}
Algo que he escrito en mis días. La validación básica de correo electrónico se toma de la implementación práctica de RFC 2822
^([a-z0-9!#$%&''*+/=?^_`{|}~-]+(?:/.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])(;)?)+$
coincide con los correos electrónicos con; separador
¿Quieres más separadores swap (;)? con [;, |]? etc dentro de los corchetes [].
Antiguo post - necesitaba el mismo RegEx. La respuesta aceptada no funcionó para mí, sin embargo, esto sí.
^(|([a-zA-Z0-9_/-/.]+)@([a-zA-Z0-9_/-/.]+)/.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_/-/.]+)@([a-zA-Z0-9_/-/.]+)/.([a-zA-Z]{2,5}){1,25})+)*$
Sin embargo, recuperada de esta publicación , la respuesta aceptada tampoco funcionó, pero sí lo hizo el Regex en el enlace DENTRO de la publicación.
[email protected]
- valida
[email protected];[email protected]
- valida
[email protected];
- no valida
empty string
- valida
Si desea validar con una cadena vacía, elimine el |
al comienzo de la expresión regular
Aquí hay un programa simple que hace esto por usted sin usar la Expresión regular. Bueno, en realidad usa una expresión regular pero no tenemos que preocuparnos por cómo se ve .php hace esto por nosotros.
public function test_reg()
{
$email_list = '''';
$array = explode(";",$email_list);
foreach ($array as $value)
{
$value;
if (!filter_var($value, FILTER_VALIDATE_EMAIL) === false)
{
$msg = "Email List Contains valid email addresses.";
}
else
{
$msg ="Your Email list contains an invalid email at.     ".$value;
break;
}
}
echo $msg;
}
Tienes que separar tus correos electrónicos por un punto y coma.
En un antiguo libro de expresiones regulares, declararon que no se puede escribir una expresión regular para coincidir con todas las direcciones de correo electrónico válidas (aunque puede acercarse).
Aquí hay un sitio web que trata con expresiones regulares y direcciones de correo electrónico.
Te recomendaría que dividieras la cadena en ;
y ,
límites y verifique cada dirección de correo electrónico por separado para que sea válida / no válida con su expresión regular.
Esta es su expresión original, modificada para que permita varios correos electrónicos separados por punto y coma y (opcionalmente) espacios además del punto y coma. También permite una única dirección de correo electrónico que no termina en punto y coma.
Esto permite entradas en blanco (sin direcciones de correo electrónico). Puede cambiar la final * por + para requerir al menos una dirección.
(([a-zA-Z0-9_/-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)|(([a-zA-Z0-9/-]+/.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(/]?)(/s*;/s*|/s*$))*
Si necesita permitir una coma, aparte del punto y coma, puede cambiar este grupo:
(/s*;/s*|/s*$)
por este:
(/s*(;|,)/s*|/s*$)
Nota importante: como indica el comentario de Martin, si hay texto adicional antes o después de la lista de direcciones de correo electrónico correcta, la validación no fallará. Así que funcionaría como un "buscador de correo electrónico". Para que funcione como un validador, debe agregar ^
al principio de la expresión regular y $
al final. Esto asegurará que la expresión coincida con todo el texto. Así que la reex completa sería:
^(([a-zA-Z0-9_/-/.]+)@((/[[0-9]{1,3}/.[0-9]{1,3}/.[0-9]{1,3}/.)|(([a-zA-Z0-9/-]+/.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(/]?)(/s*;/s*|/s*$))*$
Puede agregar una /s*
adicional después de ^
para tolerar los espacios en blanco al principio de la lista, como este. Es decir, incluir ^/s*
lugar de simplemente ^
La expresión ya tolera espacios en blanco al final tal como está.
Esta es una pregunta muy antigua, pero pensé que compartiría mi código C #.
Decidí analizar por el punto y coma y luego revisar cada correo electrónico individualmente:
string toAddress = "[email protected];[email protected];";
Regex rgx = new Regex(@"^[_a-z0-9-]+(/.[_a-z0-9-]+)*(/+[a-z0-9-]+)?@[a-z0-9-]+(/.[a-z0-9-]+)*$");
List<string> emailArray = new List<string>();
if(toAddress != null && toAddress != "")
{
if (toAddress.IndexOf(";") != -1)
{
emailArray = toAddress.Replace(" ","").Split('';'').ToList();
}
else
{
emailArray.Add(toAddress);
}
foreach (string email in emailArray)
{
if (rgx.IsMatch(email ?? ""))
{
SendEmail(email, subject, body);
}
}
}
Los nombres de dominio son en realidad mucho más complejos. Por ejemplo, la mayoría de los TLD ahora usan nombres de dominio Unicode , que son bastante comunes en Europa. Considere la dirección de correo electrónico mailtest@пример.испытание, que en realidad es perfectamente válida (aunque siempre se pueden transcribir al formulario antiguo - [email protected]). Esto significa que probablemente sea más fácil definir qué caracteres no son válidos para un nombre de dominio. Ver ICANNs .
Además, los TLD tampoco forman parte estrictamente del conjunto que ha definido; consulte la lista de IANA de TLD válidos . Por ejemplo, [email protected] es una dirección de correo electrónico válida.
En resumen, para validar direcciones de correo electrónico, considere ir con una biblioteca de terceros establecida, a menos que esté tratando con un caso especial limitado.
Ahora, para su pregunta original, recomendaría una etapa de preproceso en la que se divide en delimitadores razonables ('','' y '';''), recorte los espacios en blanco (al menos si se trata de la entrada del usuario) y valida cada entrada.
Por favor prueba esto
^([/w+-.%]+@[/w-.]+/.[A-Za-z]{2,4};?)+$