ver validate correos cola sql sql-server tsql email

correos - validate email sql server



T-SQL: verificar el formato del correo electrónico (4)

AFAIK no hay una buena manera de hacer esto.

El estándar de formato de correo electrónico es tan complejo que los analizadores se ejecutan en miles de líneas de código, pero incluso si tuviera que usar una forma más simple que fallaría en algunas direcciones oscuras pero válidas, tendría que hacerlo sin expresiones regulares que son no soportado de forma nativa por T-SQL (de nuevo, no estoy 100% en eso), dejándote con un simple repliegue de algo así como:

LIKE ''%_@_%_.__%''

..o similar.

En general, creo que no deberías estar haciendo esto en el último momento posible (cuando insertas en un DB) deberías hacerlo en la primera oportunidad y / o una puerta de enlace común (el controlador que realmente hace el inserto de SQL) solicitud), donde, por cierto, tendría la ventaja de regex, y posiblemente incluso una biblioteca que hace la validación "real" para usted.

Tengo este escenario donde necesito integridad de datos en la base de datos física. Por ejemplo, tengo una variable de @email_address VARCHAR(200) y quiero verificar si el valor de @email_address es de formato de correo electrónico. ¿Alguien tiene alguna idea de cómo verificar el formato en T-SQL?

¡Muchas gracias!


No hay una manera fácil de hacerlo en T-SQL, me temo. Para validar todas las variedades de direcciones de correo electrónico permitidas por RFC 2822 , deberá usar una expresión regular.

Más información aquí .

Tendrá que definir su alcance, si quiere simplificarlo.


Probé la siguiente consulta con diferentes direcciones de correo electrónico incorrectas y válidas. Debería hacer el trabajo.

IF ( CHARINDEX('' '',LTRIM(RTRIM(@email_address))) = 0 AND LEFT(LTRIM(@email_address),1) <> ''@'' AND RIGHT(RTRIM(@email_address),1) <> ''.'' AND CHARINDEX(''.'',@email_address ,CHARINDEX(''@'',@email_address)) - CHARINDEX(''@'',@email_address ) > 1 AND LEN(LTRIM(RTRIM(@email_address ))) - LEN(REPLACE(LTRIM(RTRIM(@email_address)),''@'','''')) = 1 AND CHARINDEX(''.'',REVERSE(LTRIM(RTRIM(@email_address)))) >= 3 AND (CHARINDEX(''.@'',@email_address ) = 0 AND CHARINDEX(''..'',@email_address ) = 0) ) print ''valid email address'' ELSE print ''not valid''

Comprueba estas condiciones:

  • Sin espacios integrados
  • ''@'' no puede ser el primer caracter de una dirección de correo electrónico
  • ''''. no puede ser el último personaje de una dirección de correo electrónico
  • Debe haber un ''.'' en algún lugar después de ''@''
  • el signo ''@'' está permitido
  • El nombre de dominio debe terminar con al menos 2 extensiones de caracteres
  • no puede tener patrones como ''. @'' y ''..''

Si usa SQL 2005 o 2008, le conviene leer los procedimientos almacenados de CLR y usar el motor de expresiones regulares .NET de esta manera . Si está utilizando SQL 2000 o una versión anterior, puede usar la expresión regular del motor de scripting VBScript como ths . También podría usar un procedimiento almacenado extendido como este