2011-08-17 23 views
5

Similar a this question, pero no estoy seguro de cómo implementar en este caso.Cómo analizar/recortar direcciones de correo electrónico del texto

Un usuario de confianza (no necesita preocuparse por validar la entrada) está escribiendo/pegando direcciones de correo electrónico en un campo de texto. En el evento de desenfoque, me gustaría mirar el texto y limpiar lo que él impugnó (generalmente después de copiar y pegar una lista de direcciones de un cliente de correo electrónico).

"Bob Smith" <[email protected]>, [email protected], "John Doe"<[email protected]>

sería recortado a:

[email protected], [email protected], [email protected]

Respuesta

-2
myEmailList=userInput.match(/[a-zA-z0-9_.][email protected][a-zA-Z0-9_.]+\.(com|org|whatever)/g); 
myEmailListString=myEmailList.join(', '); 

O simplemente hacer la primera línea si usted está queriendo un conjunto de las direcciones de correo electrónico.

+4

No hagas tus propias expresiones regulares para analizar las direcciones de correo electrónico. ¿Seriamente? (com | org | lo que sea) –

+2

Sí, el "lo que sea" era un marcador de posición para cualquier TLD que quisiera insertar. Aunque, con la nueva resolución y unos cientos de miles de dólares, 'lo que sea' podría ser un TLD. :) –

+2

exactamente, no era que no entendiera "lo que sea", solo que ** estoy en desacuerdo violento con este enfoque. ** –

4

Esta expresión regular debe eliminar cualquier cosa entre comillas dobles, así como < y > caracteres.

/".*?"|[<>]/ 

En Javascript, puede que tenga algo en este sentido:

line.replace(/".*?"|[<>]/g, ''); 
+0

Realmente no importa. La expresión regular anterior eliminará cualquier paréntesis angulares que estén presentes. No pasará nada a las direcciones de correo electrónico que no estén rodeadas por corchetes angulares. –

+0

@Mark, ¿Es este javascript? se parece más a php ... – snumpy

+0

Lo siento, me perdí que esto era Javascript y no PHP. He actualizado para mostrarlo en JS. –

4

dirección de correo electrónico válida puede ser muy extraño, así que me gustaría sugerir que no prohíbe nada en ese campo de lo contrario puede ser también posible que su programa es inútil porque los usuarios no podrán enviar correos electrónicos a direcciones de correo electrónico válidas .

Para leer la historia completa see this blog post o ir para la RFC usted mismo.

+2

Mi impresión es que esta no es una forma de usuario para todos los usuarios. Más bien es una forma que una sola persona está usando para ingresar en masa un montón de datos. Entonces, aunque creo que usted hace excelentes puntos, no sé si eso es una preocupación aquí. –

+0

Ma tiene razón, pero es tan fácil para un programador ser engañado para escribir un software ofensivo que es solo una molestia para los usuarios. El software inteligente con una lógica compleja e innecesaria a veces es un problema, especialmente si es inteligente pero no lo suficientemente inteligente como para hacerlo bien, y si no hay forma de eludir e inhabilitar esta mitad de inteligencia. – 6502

1

Usted puede utilizar el método .math() para analizar rápidamente los mensajes de correo electrónico en una matriz:

inputval.match(/[A-z0-9][email protected][A-z0-9]+.[A-z]{2,3}/g) 

Si desea convertir ese entonces en una cadena, se puede añadir o .join(', ').join('; ') a ella. La expresión regular se simplifica. Hay bastantes expresiones regulares para analizar correos electrónicos, pero la anterior es una versión simplificada. No tiene en cuenta los subdominios, como se señala en los comentarios a continuación, ni los TLD de varias partes (Tampoco tiene en cuenta el símbolo + en la primera parte de la dirección de correo electrónico). Sustituye con una expresión regular que coincida con tus necesidades.

+0

no coincide con [email protected] –

+0

@ CodeGuy Tiene razón. Noté que la expresión regular está muy simplificada. Email regex es una moneda de diez centavos y puede ser fácilmente sustituido por lo que tengo arriba. El punto que no transmití claramente fue que '.match' devolverá las coincidencias. Es una manera fácil de analizar las direcciones de correo electrónico simples, que es lo que OP estaba pidiendo. Aunque animo a otras personas a editar mis respuestas si pueden mejorarlas, la expresión regular exacta no fue el foco de mi respuesta. De todos modos, si quiere agregar una mejor expresión regular para mejorar lo que tengo aquí, siéntase libre de hacerlo. –

3
var emailList = userInput 
    .replace(/[^,;]*.?</g, "") 
    .replace(/>/g, "") 
    .replace(/[,; ]{1,}/g, "\n") 
    .replace(/[\n]{2,}/g, "\n") 
    .split("\n") 

Esto permite que la lista de correo electrónico que se proporciona en los siguientes formatos (incluyendo copia y la lista de correo electrónico pegar desde que Google Para casilla):

"Bob Rob"<[email protected]>, [email protected]; [email protected] [email protected] 

El correo electrónico IDs se pueden separar por ,, ;, o nuevas líneas.

Cuestiones relacionadas