Validar direcciones de correo electrónico en delphi


Es una dirección de correo electrónico válida?
Validar direcciones de correo electrónico en Delphi
Hoy en día es muy común que nuestros programas de almacenar las direcciones de correo electrónico en bases de datos como parte de los datos de personal, clientes, proveedores, etc. Cuando se solicita al usuario una dirección de correo electrónico, ¿cómo sabemos si el valor introducido es formalmente correcta? En este artículo voy a mostrar cómo validar direcciones de correo electrónico usando una variación de la RFC #822.
El RFC #822 reglas de la 'NORMA PARA EL FORMATO DE ARPA INTERNET MENSAJES de TEXTO'.
de Acuerdo a esta regla, las siguientes son direcciones de correo electrónico válidas:
& nbsp & nbsp John Doe [email protected]
& nbsp & nbsp John Doe
& nbsp & nbsp 'John Doe' [email protected]
& nbsp & nbsp 'Juan pérez'
El propósito de mi código no es para validar este tipo de cosas, pero estrictamente lo necesario para llegar a un único destinatario (como '[email protected]'), que en la especificación de lo que se conoce como un 'addr-spec', que tiene la forma:
& nbsp & nbsp parte local@dominio

  • locales-part = una 'palabra' o más, separados por períodos de
  • dominio = una 'sub-dominio' o más, separados por períodos


Una 'palabra' puede ser un 'átomo' o un 'citado-string':

  • átomo = uno o más caracteres en el rango de #33..#126 excepto ()<>@, ://'.[]
  • citado-string = Un texto entre comillas dobles que puede contener 0 o más caracteres (#0..#127) excepto ''' y #13. Una barra invertida ('/') cita el siguiente carácter.


Un 'sub-dominio' puede ser un 'dominio-ref' (un 'átomo') o un 'dominio-literal':

  • dominio literal = Un texto entre corchetes que puede contener 0 o más caracteres (#0..#127) excepto '[', ']' y #13. Una barra invertida ('/') cita el siguiente carácter.


Según el RFC 822, los caracteres extendidos (#128..#255) no puede ser parte de una dirección de correo electrónico, sin embargo, muchos servidores de correo aceptarlos y la gente los usa, así que voy a tomar en cuenta.
El RFC 822 es muy abierto acerca de los nombres de dominio. Para una verdadera dirección de correo electrónico tal vez deberíamos restringir el dominio de la parte. Usted puede leer más acerca de los nombres de dominio en el RFC #1034 y RFC #1035.
Para el RFC 1034 y RFC 1035, un nombre de dominio está formado por 'sub-dominios' separados por puntos, y cada subdominio comienza con una letra ('a'..'z', 'A'..'Z') y debe ser seguido por cero o más letras, dígitos y guiones, pero no puede terminar con un guión. Vamos a considerar que un dominio válido debe tener al menos dos 'sub-dominios' (como 'host.com').
Ahora que tenemos las reglas claras, vamos a llegar a la obra. El algoritmo para la función se asemeja a los estados de transición de la máquina. Caracteres de la cadena son procesados en un bucle, y para cada uno de los caracteres primero debemos determinar en que estado de la máquina y, a continuación, procesamos el personaje en consecuencia, para determinar si la máquina debe continuar en ese estado, cambiar a un estado diferente o producir un error (romper el bucle). Este tipo de algoritmos son ampliamente tratados en la programación-algoritmos de libros de texto, así que vamos a tener derecho a la código:
función ValidEmail(email: string): boolean
& nbsp & nbsp // Devuelve True si la dirección de correo electrónico es válida
& nbsp & nbsp // Autor: Ernesto D''Spirito
& nbsp & nbsp const
& nbsp & nbsp & nbsp & nbsp // los caracteres Válidos en un 'átomo'
& nbsp & nbsp & nbsp & nbsp atom_chars = [#33..#255] - ['(', ')', '<', '>', '@', ',', ' ', ':',
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp '/', '/', ''', '.', '[', ']', #127]
& nbsp & nbsp & nbsp & nbsp // caracteres Válidos en una 'cita de la cadena'
& nbsp & nbsp & nbsp & nbsp quoted_string_chars = [#0..#255] - [''', #13, '/']
& nbsp & nbsp & nbsp & nbsp // los caracteres Válidos en un subdominio
& nbsp & nbsp & nbsp & nbsp letras = ['A'..'Z', 'a'..'z']
& nbsp & nbsp & nbsp & nbsp letters_digits = ['0'..'9', 'A'..'Z', 'a'..'z']
& nbsp & nbsp & nbsp & nbsp subdomain_chars = ['-', '0'..'9', 'A'..'Z', 'a'..'z']
& nbsp & nbsp tipo de
& nbsp & nbsp & nbsp & nbsp Estados = (STATE_BEGIN, STATE_ATOM, STATE_QTEXT, STATE_QCHAR,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_QUOTE, STATE_LOCAL_PERIOD, STATE_EXPECTING_SUBDOMAIN,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_SUBDOMAIN, STATE_HYPHEN)
& nbsp & nbsp var
& nbsp & nbsp & nbsp & nbsp Estado: los Estados
& nbsp & nbsp & nbsp & nbsp i, n, subdominios: integer
& nbsp & nbsp & nbsp & nbsp c: char
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp Estado := STATE_BEGIN

& nbsp & nbsp & nbsp & nbsp n := Largo(correo electrónico)
& nbsp & nbsp & nbsp & nbsp i := 1
& nbsp & nbsp & nbsp & nbsp subdominios := 1
& nbsp & nbsp & nbsp & nbsp mientras (i <= n) empiezan
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp c := un correo electrónico a[i]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp caso del Estado de
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_BEGIN:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c en atom_chars, a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_ATOM
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if c =''',
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_QTEXT
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_ATOM:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c ='@', a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_EXPECTING_SUBDOMAIN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if c = '.'entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_LOCAL_PERIOD
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp otra cosa si no (c en atom_chars) a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_QTEXT:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c = '/' entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_QCHAR
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if c =''',
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_QUOTE
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp otra cosa si no (c en quoted_string_chars) a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_QCHAR:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_QTEXT
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_QUOTE:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c ='@', a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_EXPECTING_SUBDOMAIN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if c = '.'entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_LOCAL_PERIOD
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_LOCAL_PERIOD:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c en atom_chars, a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_ATOM
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if c =''',
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_QTEXT
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_EXPECTING_SUBDOMAIN:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c en las letras, a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_SUBDOMAIN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_SUBDOMAIN:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c = '.'a continuación, empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp inc(subdominios)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_EXPECTING_SUBDOMAIN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final por el contrario, si c = ' - '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_HYPHEN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp otra cosa si no (c en letters_digits) a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_HYPHEN:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c en letters_digits, a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_SUBDOMAIN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp cosa si c < > ' - '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp inc(i)
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp si i <= n
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado := False
& nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado := (Estado = STATE_SUBDOMAIN) y (subdominios >= 2)
& nbsp & nbsp final

Cualquier tipo de colaboración para mejorar esta función será bienvenida.
Usted puede encontrar el código fuente completo de este artículo en el archivo que acompaña a la Pascal Boletín #22.









Validar direcciones de correo electronico en delphi


Validar direcciones de correo electronico en delphi : Multi-millones de consejos para hacer su vida mas facil.


Es una direccion de correo electronico valida?
Validar direcciones de correo electronico en Delphi
Hoy en dia es muy comun que nuestros programas de almacenar las direcciones de correo electronico en bases de datos como parte de los datos de personal, clientes, proveedores, etc. Cuando se solicita al usuario una direccion de correo electronico, ¿como sabemos si el valor introducido es formalmente correcta? En este articulo voy a mostrar como validar direcciones de correo electronico usando una variacion de la RFC #822.
El RFC #822 reglas de la 'NORMA PARA EL FORMATO DE ARPA INTERNET MENSAJES de TEXTO'.
de Acuerdo a esta regla, las siguientes son direcciones de correo electronico validas:
& nbsp & nbsp John Doe [email protected]
& nbsp & nbsp John Doe
& nbsp & nbsp 'John Doe' [email protected]
& nbsp & nbsp 'Juan perez'
El proposito de mi codigo no es para validar este tipo de cosas, pero estrictamente lo necesario para llegar a un unico destinatario (como '[email protected]'), que en la especificacion de lo que se conoce como un 'addr-spec', que tiene la forma:
& nbsp & nbsp parte local@dominio

  • locales-part = una 'palabra' o mas, separados por periodos de
  • dominio = una 'sub-dominio' o mas, separados por periodos


Una 'palabra' puede ser un 'atomo' o un 'citado-string':

  • atomo = uno o mas caracteres en el rango de #33..#126 excepto ()<>@, ://'.[]
  • citado-string = Un texto entre comillas dobles que puede contener 0 o mas caracteres (#0..#127) excepto ''' y #13. Una barra invertida ('/') cita el siguiente caracter.


Un 'sub-dominio' puede ser un 'dominio-ref' (un 'atomo') o un 'dominio-literal':

  • dominio literal = Un texto entre corchetes que puede contener 0 o mas caracteres (#0..#127) excepto '[', ']' y #13. Una barra invertida ('/') cita el siguiente caracter.


Segun el RFC 822, los caracteres extendidos (#128..#255) no puede ser parte de una direccion de correo electronico, sin embargo, muchos servidores de correo aceptarlos y la gente los usa, asi que voy a tomar en cuenta.
El RFC 822 es muy abierto acerca de los nombres de dominio. Para una verdadera direccion de correo electronico tal vez deberiamos restringir el dominio de la parte. Usted puede leer mas acerca de los nombres de dominio en el RFC #1034 y RFC #1035.
Para el RFC 1034 y RFC 1035, un nombre de dominio esta formado por 'sub-dominios' separados por puntos, y cada subdominio comienza con una letra ('a'..'z', 'A'..'Z') y debe ser seguido por cero o mas letras, digitos y guiones, pero no puede terminar con un guion. Vamos a considerar que un dominio valido debe tener al menos dos 'sub-dominios' (como 'host.com').
Ahora que tenemos las reglas claras, vamos a llegar a la obra. El algoritmo para la funcion se asemeja a los estados de transicion de la maquina. Caracteres de la cadena son procesados en un bucle, y para cada uno de los caracteres primero debemos determinar en que estado de la maquina y, a continuacion, procesamos el personaje en consecuencia, para determinar si la maquina debe continuar en ese estado, cambiar a un estado diferente o producir un error (romper el bucle). Este tipo de algoritmos son ampliamente tratados en la programacion-algoritmos de libros de texto, asi que vamos a tener derecho a la codigo:
funcion ValidEmail(email: string): boolean
& nbsp & nbsp // Devuelve True si la direccion de correo electronico es valida
& nbsp & nbsp // Autor: Ernesto D''Spirito
& nbsp & nbsp const
& nbsp & nbsp & nbsp & nbsp // los caracteres Validos en un 'atomo'
& nbsp & nbsp & nbsp & nbsp atom_chars = [#33..#255] - ['(', ')', '<', '>', '@', ',', ' ', ':',
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp '/', '/', ''', '.', '[', ']', #127]
& nbsp & nbsp & nbsp & nbsp // caracteres Validos en una 'cita de la cadena'
& nbsp & nbsp & nbsp & nbsp quoted_string_chars = [#0..#255] - [''', #13, '/']
& nbsp & nbsp & nbsp & nbsp // los caracteres Validos en un subdominio
& nbsp & nbsp & nbsp & nbsp letras = ['A'..'Z', 'a'..'z']
& nbsp & nbsp & nbsp & nbsp letters_digits = ['0'..'9', 'A'..'Z', 'a'..'z']
& nbsp & nbsp & nbsp & nbsp subdomain_chars = ['-', '0'..'9', 'A'..'Z', 'a'..'z']
& nbsp & nbsp tipo de
& nbsp & nbsp & nbsp & nbsp Estados = (STATE_BEGIN, STATE_ATOM, STATE_QTEXT, STATE_QCHAR,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_QUOTE, STATE_LOCAL_PERIOD, STATE_EXPECTING_SUBDOMAIN,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_SUBDOMAIN, STATE_HYPHEN)
& nbsp & nbsp var
& nbsp & nbsp & nbsp & nbsp Estado: los Estados
& nbsp & nbsp & nbsp & nbsp i, n, subdominios: integer
& nbsp & nbsp & nbsp & nbsp c: char
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp Estado := STATE_BEGIN

& nbsp & nbsp & nbsp & nbsp n := Largo(correo electronico)
& nbsp & nbsp & nbsp & nbsp i := 1
& nbsp & nbsp & nbsp & nbsp subdominios := 1
& nbsp & nbsp & nbsp & nbsp mientras (i <= n) empiezan
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp c := un correo electronico a[i]
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp caso del Estado de
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_BEGIN:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c en atom_chars, a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_ATOM
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if c =''',
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_QTEXT
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_ATOM:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c ='@', a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_EXPECTING_SUBDOMAIN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if c = '.'entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_LOCAL_PERIOD
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp otra cosa si no (c en atom_chars) a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_QTEXT:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c = '/' entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_QCHAR
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if c =''',
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_QUOTE
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp otra cosa si no (c en quoted_string_chars) a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_QCHAR:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_QTEXT
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_QUOTE:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c ='@', a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_EXPECTING_SUBDOMAIN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if c = '.'entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_LOCAL_PERIOD
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_LOCAL_PERIOD:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c en atom_chars, a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_ATOM
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if c =''',
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_QTEXT
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_EXPECTING_SUBDOMAIN:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c en las letras, a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_SUBDOMAIN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_SUBDOMAIN:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c = '.'a continuacion, empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp inc(subdominios)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_EXPECTING_SUBDOMAIN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final por el contrario, si c = ' - '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_HYPHEN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp otra cosa si no (c en letters_digits) a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp STATE_HYPHEN:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si c en letters_digits, a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Estado := STATE_SUBDOMAIN
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp cosa si c < > ' - '
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp break
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp inc(i)
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp si i <= n
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado := False
& nbsp & nbsp & nbsp & nbsp else
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado := (Estado = STATE_SUBDOMAIN) y (subdominios >= 2)
& nbsp & nbsp final

Cualquier tipo de colaboracion para mejorar esta funcion sera bienvenida.
Usted puede encontrar el codigo fuente completo de este articulo en el archivo que acompaña a la Pascal Boletin #22.


Validar direcciones de correo electrónico en delphi

Validar direcciones de correo electrónico en delphi : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación