Hostname Validator¶
Zend\Validator\Hostname
allows you to validate a hostname against a set of known specifications. It is possible
to check for three different types of hostnames: a DNS Hostname (i.e. domain.com
), IP address (i.e. 1.2.3.4),
and Local hostnames (i.e. localhost). By default only DNS hostnames are matched.
Supported options for Zend\Validator\Hostname¶
The following options are supported for Zend\Validator\Hostname
:
- allow: Defines the sort of hostname which is allowed to be used. See Hostname types for details.
- idn: Defines if IDN domains are allowed or not. This option defaults to
TRUE
. - ip: Allows to define a own IP validator. This option defaults to a new instance of
Zend\Validator\Ip
. - tld: Defines if TLDs are validated. This option defaults to
TRUE
.
Basic usage¶
A basic example of usage is below:
1 2 3 4 5 6 7 8 9 | $validator = new Zend\Validator\Hostname();
if ($validator->isValid($hostname)) {
// hostname appears to be valid
} else {
// hostname is invalid; print the reasons
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
|
This will match the hostname $hostname
and on failure populate getMessages()
with useful error messages.
Validating different types of hostnames¶
You may find you also want to match IP addresses, Local hostnames, or a combination of all allowed types. This can
be done by passing a parameter to Zend\Validator\Hostname
when you instantiate it. The parameter should be an
integer which determines what types of hostnames are allowed. You are encouraged to use the
Zend\Validator\Hostname
constants to do this.
The Zend\Validator\Hostname
constants are: ALLOW_DNS
to allow only DNS hostnames, ALLOW_IP
to allow
IP addresses, ALLOW_LOCAL
to allow local network names, ALLOW_URI
to allow RFC3986-compliant addresses,
and ALLOW_ALL
to allow all four above types.
Note
Additional Information on ALLOW_URI
ALLOW_URI
allows to check hostnames according to RFC3986. These are registered names which are used by
WINS, NetInfo and also local hostnames like those defined within your .hosts
file.
To just check for IP addresses you can use the example below:
1 2 3 4 5 6 7 8 9 | $validator = new Zend\Validator\Hostname(Zend\Validator\Hostname::ALLOW_IP);
if ($validator->isValid($hostname)) {
// hostname appears to be valid
} else {
// hostname is invalid; print the reasons
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
|
As well as using ALLOW_ALL
to accept all common hostnames types you can combine these types to allow for
combinations. For example, to accept DNS and Local hostnames instantiate your Zend\Validator\Hostname
class
as so:
1 2 | $validator = new Zend\Validator\Hostname(Zend\Validator\Hostname::ALLOW_DNS |
Zend\Validator\Hostname::ALLOW_IP);
|
Validating International Domains Names¶
Some Country Code Top Level Domains (ccTLDs), such as ‘de’ (Germany), support international characters in domain
names. These are known as International Domain Names (IDN). These domains can be matched by
Zend\Validator\Hostname
via extended characters that are used in the validation process.
Note
IDN domains
Until now more than 50 ccTLDs support IDN domains.
To match an IDN domain it’s as simple as just using the standard Hostname validator since IDN matching is
enabled by default. If you wish to disable IDN validation this can be done by either passing a parameter to the
Zend\Validator\Hostname
constructor or via the setValidateIdn()
method.
You can disable IDN validation by passing a second parameter to the Zend\Validator\Hostname
constructor in
the following way.
1 2 3 4 5 6 7 | $validator =
new Zend\Validator\Hostname(
array(
'allow' => Zend\Validator\Hostname::ALLOW_DNS,
'useIdnCheck' => false
)
);
|
Alternatively you can either pass TRUE
or FALSE
to setValidateIdn()
to enable or disable IDN
validation. If you are trying to match an IDN hostname which isn’t currently supported it is likely it will fail
validation if it has any international characters in it. Where a ccTLD file doesn’t exist in
Zend/Validator/Hostname
specifying the additional characters a normal hostname validation is performed.
Note
IDN validation
Please note that IDNs are only validated if you allow DNS hostnames to be validated.
Validating Top Level Domains¶
By default a hostname will be checked against a list of known TLDs. If this functionality is not required it
can be disabled in much the same way as disabling IDN support. You can disable TLD validation by passing a
third parameter to the Zend\Validator\Hostname
constructor. In the example below we are supporting IDN
validation via the second parameter.
1 2 3 4 5 6 7 8 | $validator =
new Zend\Validator\Hostname(
array(
'allow' => Zend\Validator\Hostname::ALLOW_DNS,
'useIdnCheck' => true,
'useTldCheck' => false
)
);
|
Alternatively you can either pass TRUE
or FALSE
to setValidateTld()
to enable or disable TLD
validation.
Note
TLD validation
Please note TLDs are only validated if you allow DNS hostnames to be validated.