Dirección de EmailZend_Validate_EmailAddress
Le permite validar una dirección
de email. El validador primero divide la dirección de email
en la parte
local @ nombre de host e intenta igualar a estos contra especificaciones
conocidas para direcciones y nombres de host para el correo electrónico.
Utilización básica
Un ejemplo básico de uso se ve a continuación:
isValid($email)) {
// El email parece ser válido
} else {
// El email es inválido; muestre las razones
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
]]>
Esto coincide con el correo electrónico
$email
y si fracasa,
alimenta
$validator->getMessages()
con mensajes de error útiles.
>Partes locales complejasZend_Validate_EmailAddress
supports several options which can
either be set at initiation, by giving an array with
the related options, or
afterwards, by using
setOptions()
. The following options are
supported:
allow
: Defines which type of domain names are accepted.
This option is used in
conjunction with the hostname option to set the
hostname validator. For more
informations about possible values of this
option, look at
Hostname
and possible
ALLOW
* constants. This option defaults to
ALLOW_DNS
.
hostname
: Sets the hostname validator with which the
domain part of the email address
will be validated.
mx
: Defines if the MX records from the server should be
detected. If this option is
defined to
TRUE
then the MX
records are used to verify if the server
accepts emails. This option
defaults to
FALSE
.
deep
: Defines if the servers MX records should be verified
by a deep check. When this
option is set to
TRUE
then
additionally to MX records also the A, A6 and
AAAA
records
are used to verify if the server accepts emails. This option defaults to
FALSE
.
domain
: Defines if the domain part should be checked.
When this option is set to
FALSE
, then only the local part
of the email address will be checked. In this case the
hostname validator will
not be called. This option defaults to
TRUE
.
setOptions(array('domain' => false));
]]>Complex local partsZend_Validate_EmailAddress
se comparará con cualquier
dirección de correo válida de acuardo a RFC2822.
Por ejemplo, correos electrónicos válidos incluyen
bob@domain.com
,
bob+jones@domain.us
,
"bob@jones"@domain.com
y
"bob jones"@domain.com
Algunos formatos obsoletos de email actualmente no validan
(por ejemplo los retornos de carro o "\" un caracter en una dirección
de correo electrónico).
Validating only the local part
If you need
Zend_Validate_EmailAddress
to check only the local
part of an email address, and want to disable validation of the
hostname, you can
set the
domain
option to
FALSE
. This forces
Zend_Validate_EmailAddress
not to validate the hostname part of
the email address.
setOptions(array('domain' => FALSE));
]]>Validating different types of hostnames
La parte nombre de host de una dirección de correo es validado contra
Zend_Validate_Hostname
.
Por defecto sólo son aceptados nombres de host DNS de la forma
domain.com
, aunque si lo desea también puede aceptar
direcciones IP y nombres de host locales.
Para ello necesita instanciar a
Zend_Validate_EmailAddress
pasando un parámetro para indicar el tipo de nombres de host que quiere aceptar.
Más detalles están incluidos en
Zend_Validate_EmailAddress
,
aunque abajo hay un ejemplo de cómo aceptar tanto nombres de host DNS y
locales:
isValid($email)) {
// email parece ser válido
} else {
// email es inválido; muestre las razones
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
]]>Verificar si el nombre de host realmente acepta email
Sólo porque una dirección de correo electrónico está en el formato correcto,
no necesariamente significa que esa dirección de correo electrónico
existe realmente. Para ayudar a resolver este problema, puede usar la
validación MX para comprobar si existe una entrada MX (email) en el
registro DNS para correo electrónico en ese nombre de host.
Esto le dice que el nombre de host acepta email, pero no le dice si la
dirección de correo electrónico exacta es válida en si misma.
La comprobación MX no está activada por defecto y en este momento es
soportada sólo por plataformas UNIX.
Para habilitar el control MX puede pasar un segundo parámetro al
constructor
Zend_Validate_EmailAddress
.
Zend_Validate_Hostname::ALLOW_DNS,
'mx' => true
)
);
]]>MX Check under Windows
Within Windows environments MX checking is only available when
PHP
5.3 or above is used. Below
PHP
5.3 MX
checking will not be used even if it's activated within the options.
Alternativamente, para activar o desactivar la validación MX puede pasar
TRUE
o
FALSE
a
$validator->setValidateMx()
.
Al habilitarlo, se usarán las funciones de red para comprobar
la presencia de un registro MX en el nombre de host de la dirección
de correo electrónico que desea validar.
Tenga en cuenta esto probablemente hará más lento su script.
Sometimes validation for MX records returns false, even if emails are accepted. The
reason behind this behaviour is, that servers can accept emails even if they do not
provide a MX record. In this case they can provide A, A6 or
AAAA
records. To allow
Zend_Validate_EmailAddress
to check also for
these other records, you need to set deep MX validation. This can be done at initiation
by setting the
deep
option or by using
setOptions()
.
Zend_Validate_Hostname::ALLOW_DNS,
'mx' => true,
'deep' => true
)
);
]]>Performance warning
You should be aware that enabling MX check will slow down you script because of the
used network functions. Enabling deep check will slow down your script even more as
it searches the given server for 3 additional types.
Disallowed IP addresses
You should note that MX validation is only accepted for external servers. When
deep
MX validation is enabled, then local IP addresses like
192.168.*
or
169.254.*
are not accepted.
Validating International Domains NamesZend_Validate_EmailAddress
también comparará caracteres
internationales que existen en algunos dominios.
Esto se conoce como soporte de International Domain Name (IDN).
Está activado por defecto, aunque puede deshabilitarlo internamente
cambiando el ajuste a través del objeto
Zend_Validate_Hostname
que existe en
Zend_Validate_EmailAddress
.
getHostnameValidator()->setValidateIdn(false);
]]>
Sobre el uso de
setValidateIdn()
encontrará más información
en la documentación de
Zend_Validate_Hostname
.
Tenga en cuenta que los IDNs se validarán solo si
usted permite que nombres de host DNS sean validados.
Validación de dominios de nivel superior
Por defecto, un nombre de host se cotejará con una lista conocida de TLDs.
Está activado por defecto, aunque puede deshabilitarlo cambiando el
ajuste a través del objeto interno
Zend_Validate_Hostname
que existe en
Zend_Validate_EmailAddress
.
getHostnameValidator()->setValidateTld(false);
]]>
Encontrará más información sobre el uso de
setValidateTld()
en la documentación de
Zend_Validate_Hostname
.
Tenga en cuenta que los TLDs se validarán solo si
usted permite que nombres de host DNS sean validados.
Setting messagesZend_Validate_EmailAddress
makes also use of
Zend_Validate_Hostname
to check the hostname part of a given
email address. As with Zend Framework 1.10 you can simply set messages for
Zend_Validate_Hostname
from within
Zend_Validate_EmailAddress
.
setMessages(
array(
Zend_Validate_Hostname::UNKNOWN_TLD => 'I don't know the TLD you gave'
)
);
]]>
Before Zend Framework 1.10 you had to attach the messages to your own
Zend_Validate_Hostname
, and then set this validator within
Zend_Validate_EmailAddress
to get your own messages returned.