Programmer's Reference Guide
Zend Framework est fourni avec un jeu de classes de validation standard, qui sont directement utilisables par votre application.
Retourne true si et seulement si $value contient
seulement des caractères alphabétiques et numériques. Ce validateur inclue une option
permettant la validation possible des caractères espace.
Retourne true si et seulement si $value contient
seulement des caractères alphabétiques. Ce validateur inclue une option permettant la
validation possible des caractères espace.
![]() |
Note |
|---|---|
Les caractères alphabétiques comprennent les caractères destinés à constituer
des mots dans chaque langue. Cependant l'alphabet anglais est aussi utilisé pour les
langues suivantes : chinois, japonais et coréen. La langue est spécifiée par
|
Ce validateur est instancié avec le type de code-barres suivant lequel vous
souhaitez valider une valeur. Il supporte actuellement les types de code-barres
"UPC-A" (Universal Product Code) et "EAN-13" (European Article
Number), et la méthode isValid() retourne true si et seulement
si la valeur fournie est validée par l'algorithme de validation du code-barres. Vous
devez retirer tous les caractères exceptés les nombres compris entre zéro et neuf (0-9)
de la valeur à tester avant de la fournir au validateur.
Retourne true si et seulement si $value est compris
entre les valeurs minimum et maximum définies. La comparaison inclue par défaut les
bornes ($value peut égaler le minimum ou le maximum), bien que ceci puisse
être surchargé pour avoir une comparaison stricte, où $value doit être
strictement supérieur au minimum et strictement inférieur au maximum.
Retourne true si et seulement si $value respecte l'algorithme de Luhn ("module 10") pour
les numéros de cartes de crédits.
Retourne true si $value est une date valide au format
YYYY-MM-DD. Si l'option locale est fournie alors la date sera
validé suivant le paramètre local. Enfin si l'option format est fournie ce
format est utilisé pour la validation. Pour plus de détails concernant les paramètres
optionnel, referez vous à Zend_Date::isDate().
Zend_Validate_Db_RecordExists and
Zend_Validate_Db_NoRecordExists provide a means to test
whether a record exists in a given table of a database, with a given
value.
An example of basic usage of the validators:
//Check that the email address exists in the database
$validator = new Zend_Validate_Db_RecordExists('users', 'emailaddress');
if ($validator->isValid($emailaddress)) {
// email address appears to be valid
} else {
// email address is invalid; print the reasons
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
The above will test that a given email address is in the database
table. If no record is found containing the value of
$emailaddress in the specified column, then an error
message is displayed.
//Check that the username is not present in the database
$validator = new Zend_Validate_Db_NoRecordExists('users', 'username');
if ($validator->isValid($username)) {
// username appears to be valid
} else {
// username is invalid; print the reason
$messages = $validator->getMessages();
foreach ($messages as $message) {
echo "$message\n";
}
}
The above will test that a given username is not in the database
table. If a record is found containing the value of
$username in the specified column, then an error
message is displayed.
Zend_Validate_Db_RecordExists and
Zend_Validate_Db_NoRecordExists also provide a means
to test the database, excluding a part of the table, either by
providing a where clause as a string, or an array with the keys
"field" and "value".
When providing an array for the exclude clause, the !=
operator is used, so you can check the rest of a table for a value
before altering a record (for example on a user profile form)
//Check no other users have the username
$user_id = $user->getId();
$validator = new Zend_Validate_Db_NoRecordExists(
'users',
'username',
array(
'field' => 'id',
'value' => $user_id
)
);
if ($validator->isValid($username)) {
// username appears to be valid
} else {
// username is invalid; print the reason
$messages = $validator->getMessages();
foreach ($messages as $message) {
echo "$message\n";
}
}
The above example will check the table to ensure no records other
than the one where id = $user_id contains the value
$username.
You can also provide a string to the exclude clause so you can use
an operator other than !=. This can be useful for
testing against composite keys.
$post_id = $post->getId();
$clause = $db->quoteInto('post_id = ?', $category_id);
$validator = new Zend_Validate_Db_RecordExists(
'posts_categories',
'post_id',
$clause
);
if ($validator->isValid($username)) {
// username appears to be valid
} else {
// username is invalid; print the reason
$messages = $validator->getMessages();
foreach ($messages as $message) {
echo "$message\n";
}
}
The above example will check the posts_categories table
to ensure that a record with the post_id has a value
matching $category_id
You can also specify an adapter, as the fourth parameter when instantiating your validator, this will allow you to work with applications using multiple database adapters, or where you have not set a default adapter. As in the example below:
$validator = new Zend_Validate_Db_RecordExists('users', 'id', null, $dbAdapter);
Retourne true si et seulement si $value contient
seulement des caractères numériques.
Zend_Validate_EmailAddress permet de valider une adresse émail.
Ce validateur éclate d'abord l'adresse émail entre partie locale et domaine et essaie de
valider ces deux parties conformément aux spécifications des adresses émail et des noms de
domaine.
Utilisation de base
Exemple basique :
$validateur = new Zend_Validate_EmailAddress();
if ($validateur->isValid($email)) {
// l'email est valide
} else {
// l'email est invalide ; afficher pourquoi
foreach ($validateur->getMessages() as $message) {
echo "$message\n";
}
}
Ceci validera l'adresse émail $email et, en cas d'échec,
fournira des messages d'erreur informatifs via
$validator->getMessages().
Parties locales complexes
Zend_Validate_EmailAddress validera toute adresse émail
conforme à la RFC2822. Comme par exemple bob@domaine.com,
bob+jones@domaine.fr, "bob@jones"@domaine.com et "bob
jones"@domaine.com. Quelques formats d'émail obsolètes ne seront pas validés (comme
tout émail contenant un retour chariot ou un caractère "\").
Validation de différents types de noms de domaine
La partie domaine d'une adresse émail est validée via Zend_Validate_Hostname.
Par défaut, seules les domaines qualifiés sous la forme domaine.com sont
acceptés, même si, il vous est possible d'accepter les adresses IP et les domaines locaux
également.
Afin de réaliser cette opération, il vous faut instancier
Zend_Validate_EmailAddress en lui passant un paramètre indiquant le
type de nom de domaine à accepter. Les détails sont disponibles dans
Zend_Validate_EmailAddress mais vous trouverez ci-dessous un exemple
illustrant comment accepter les noms de domaines qualifiés et les hôtes locaux :
$validateur = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS | Zend_Validate_Hostname::ALLOW_LOCAL);
if ($validateur->isValid($email)) {
// l'email est valide
} else {
// l'email est invalide ; afficher pourquoi
foreach ($validateur->getMessages() as $message) {
echo "$message\n";
}
}
Vérification que le nom de domaine accepte réellement l'émail
Le fait qu'une adresse électronique est dans un format correct, ne signifie pas nécessairement que l'adresse électronique existe en réalité. Pour aider résoudre ce problème, vous pouvez utiliser la validation MX pour vérifier si une entrée MX (l'émail) existe dans le l'enregistrement du DNS pour le nom de domaine de l'émail. Cela vous dit que le nom de domaine accepte l'émail, mais ne vous dit pas que l'adresse électronique elle-même est valable.
La vérification MX n'est pas active par défaut et est seulement supporté par des
plates-formes UNIX pour l'instant. Pour activer la vérification MX vous pouvez passer un
deuxième paramètre au constructeur Zend_Validate_EmailAddress.
$validator =
new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS,
true);
Alternativement vous pouvez passer soit true soit
false à $validator->setValidateMx() pour activer ou désactiver
la validation MX.
En activant ce paramètre, les fonctions de réseau seront utilisés pour vérifier la présence d'un enregistrement MX sur le nom de domaine de l'adresse électronique que vous voulez valider. Faîtes cependant attention, cela ralentira probablement votre scénario.
Valider les noms de domaines internationaux
Zend_Validate_EmailAddress peut aussi vérifier les caractères
internationaux qui existent dans quelques domaines. Ceci est connu comme le support de Nom
de Domaine International (IDN). Celui-ci est activé par défaut, quoique vous puissiez le
mettre hors service en changeant le paramètre via l'objet interne
Zend_Validate_Hostname qui existe dans
Zend_Validate_EmailAddress.
$validator->hostnameValidator->setValidateIdn(false);
De plus amples informations concernant l'utilisation de
setValidateIdn() sont présentes dans la documentation de
Zend_Validate_Hostname.
Notez cependant que les IDNs sont seulement validés si vous autorisez la validation des nom de domaines.
Validation des "Top Level Domains"
Par défaut un nom de domaine sera vérifié grâce à une liste de TLDs connus. Ceci est
activé par défaut, quoique vous puissiez le mettre hors service en changeant le paramètre
via l'objet Zend_Validate_Hostname interne qui existe dans
Zend_Validate_EmailAddress.
$validator->hostnameValidator->setValidateTld(false);
De plus amples informations concernant l'utilisation de
setValidateTld() sont présentes dans la documentation de
Zend_Validate_Hostname.
Notez cependant que les TLDs sont seulement validés si vous autorisez la validation des nom de domaines.
Retourne true si et seulement si $value est une valeur
en virgule flottante. A partir de Zend Framework 1.8 ce validateur prend en
considération la locale courante issue du navigateur, de l'environnement ou de
l'application. Vous pouvez bien sûr utiliser les accesseurs get/setLocale
pour changer ou la fournir au moment de la création de l'instance de ce
validateur.
Retourne true si et seulement si $value est supérieure à
une valeur minimum fournie.
Retourne true si et seulement si $value contient
seulement des caractères numériques hexadécimaux.
Zend_Validate_Hostname vous permet de valider un nom de domaine
sur la base d'un ensemble de spécifications connues. Il est ainsi possible de valider trois
types différents de noms de domaine : un nom de domaine qualifié (ex : domaine.com), une
adresse IP (ex : 1.2.3.4) ou un nom de domaine local (ex : localhost). Par défaut, seul les
noms de domaine qualifiés sont acceptés.
Utilisation basique
Exemple simple :
$validateur = new Zend_Validate_Hostname();
if ($validateur->isValid($domaine)) {
// le nom de domaine est valide
} else {
// le nom de domaine est invalide ; afficher pourquoi
foreach ($validateur->getMessages() as $message) {
echo "$message\n";
}
}
Ceci validera le domaine $domaine et, en cas d'échec, fournira
des messages d'erreur informatifs via $validator->getMessages().
Validation de différents types de noms de domaine
Il peut se trouver que vous souhaitez valider des adresses IP, des noms de domaine
locaux ou toute combinaison de tous les types disponibles. Cette opération peut être
effectuée en passant un paramètre à Zend_Validate_Hostname au moment
de l'instanciation. Le paramètre doit être un entier qui détermine quels types de noms de
domaine sont admis. Il est recommandé d'utiliser les constantes de la classe
Zend_Validate_Hostname.
Les constantes de Zend_Validate_Hostname sont :
ALLOW_DNS qui autorise uniquement les noms de domaine qualifiés,
ALLOW_IP qui autorise les adresses IP, ALLOW_LOCAL qui autorise
les domaines locaux et ALLOW_ALL qui autorise les trois types précédents. Pour
vérifier uniquement les adresses IP, vous pouvez utiliser l'exemple suivant :
$validateur = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_IP);
if ($validateur->isValid($hostname)) {
// le nom de domaine est valide
} else {
// le nom de domaine est invalide ; afficher pourquoi
foreach ($validateur->getMessages() as $message) {
echo "$message\n";
}
}
Vous pouvez utiliser ALLOW_ALL pour accepter tous les types de domaines.
De même, vous pouvez créer des configurations combinant ces différents types. Par exemple,
pour accepter les domaines qualifiés et les domaines locaux, instanciez votre objet
Zend_Validate_Hostname de la manière suivante :
$validateur = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS |
Zend_Validate_Hostname::ALLOW_IP);
Validation de Nom de Domaine International (IDN)
Certains noms de domaines nationaux (Country Code Top Level Domains ou ccTLD), comme
.de (Allemagne), supporte les caractères internationaux dans leurs noms de domaine. Ceci est
connu sous le nom de Nom de Domaine International (IDN). Ces domaines peuvent être vérifiés
par Zend_Validate_Hostname grâce aux caractères étendus qui sont
utilisés dans le processus de validation.
Pour l'instant, la liste des ccTLD supportés inclus :
at (Autriche)
ch (Suisse)
li (Liechtenstein)
de (Allemagne)
fi (Finlande)
hu (Hongrie)
no (Norvège)
se (Suède)
Pour vérifier un domaine IDN c'est aussi simple que d'utiliser le validateur standard
de nom de domaine puisque la validation IDN est activé par défaut. Si vous voulez mettre
hors service la validation IDN, cela peut être fait par le passage d'un paramètre au
constructeur Zend_Validate_Hostname ou via la méthode
$validator->setValidateIdn().
Vous pouvez aussi désactiver la validation IDN en passant un second paramètre au
constructeur du Zend_Validate_Hostname comme ceci :
$validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS,
false);
Alternativement vous pouvez passer soit true soit
false à $validator->setValidateIdn() pour activer ou désactiver
la validation IDN. Si vous essayez de vérifier un nom de domaine IDN qui n'est pas
actuellement soutenu il est probable qu'il retournera une erreur s'il y a des caractères
internationaux. Quand un fichier de ccTLD spécifiant les caractères supplémentaires n'existe
pas dans "Zend/Validate/Hostname",une validation de nom de domaine normale est
réalisée.
Notez cependant que les IDNs sont seulement validés si vous autorisez la validation des noms de domaine.
Validation des "Top Level Domains"
Par défaut un nom de domaine sera vérifié grâce à une liste de TLDs connus. Si cette
fonctionnalité n'est pas nécessaire, elle peut être désactivée de la même façon que la
désactivation du support des IDNs. Vous pouvez désactiver la validation TLD en passant un
troisième paramètre au constructeur de Zend_Validate_Hostname. Dans
l'exemple ci-dessous, la validation IDN est supportée via le second paramètre.
$validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_DNS,
true,
false);
Alternativement vous pouvez passer soit true soit
false à $validator->setValidateTld() pour activer ou désactiver
la validation TLD.
Notez cependant que les TLDs sont seulement validés si vous autorisez la validation des noms de domaine.
Retourne true si et seulement si $value contient un IBAN
valide (International Bank Account Number = Numéro de compte bancaire international).
Les numéros IBAN sont validés suivant le pays dans lequel ils sont utilisés et par un
somme de contrôle.
Il existe deux manières de valider les numéros IBAN. En premier lieu, vous pouvez fournir une locale qui représente un pays. Tout numéro IBAN fourni sera donc validé suivant ce pays.
$validator = new Zend_Validate_Iban('de_AT');
$iban = 'AT611904300234573201';
if ($validator->isValid($iban)) {
// IBAN paraît être valide
} else {
// IBAN est invalide
foreach ($validator->getMessages() as $message) {
echo "$message\n";
}
}
Vous pouvez aussi vouloir valider les numéros IBAN pour des pays uniques. La manière la plus simple est donc de ne pas fournir de locale comme dans l'exemple suivant.
$validator = new Zend_Validate_Iban();
$iban = 'AT611904300234573201';
if ($validator->isValid($iban)) {
// IBAN paraît être valide
} else {
// IBAN est invalide
}
Mais ceci montre un gros problème : si vous ne devez accepter que les numéros IBAN que pour un pays en particulier, par exemple l'Allemagne, alors les numéros IBAN des autres pays seront aussi valides. Dans ce cas, souvenez vous d'une chose : quand vous devez valider un numéro IBAN pour un pays donné, vous avez juste à fournir la locale correspondante. Et quand vous acceptez tous les numéros IBAN sans restriction de pays, enlevez simplement cette locale.
Retourne true si et seulement si $value est contenue
dans un tableau. Si l'option stricte est à true, alors le type de
$value est aussi vérifié.
Retourne true si et seulement si $value est une valeur
entière. A partir de Zend Framework 1.8 ce validateur prend en considération la locale
courante issue du navigateur, de l'environnement ou de l'application. Vous pouvez bien
sûr utiliser les accesseurs get/setLocale pour changer ou la fournir au
moment de la création de l'instance de ce validateur.
Retourne true si et seulement si $value est inférieure à
une valeur maximum fournie.
The following validators conform to the Sitemap XML protocol.
Validates whether a string is valid for using as a 'changefreq' element in a Sitemap XML document. Valid values are: 'always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', or 'never'.
Returns TRUE if and only if the value is a string
and is equal to one of the frequencies specified above.
Validates whether a string is valid for using as a 'lastmod' element in a Sitemap XML document. The lastmod element should contain a W3C date string, optionally discarding information about time.
Returns TRUE if and only if the given value is
a string and is valid according to the protocol.
Exemple 58.1. Sitemap Lastmod Validator
$validator = new Zend_Validate_Sitemap_Lastmod();
$validator->isValid('1999-11-11T22:23:52-02:00'); // true
$validator->isValid('2008-05-12T00:42:52+02:00'); // true
$validator->isValid('1999-11-11'); // true
$validator->isValid('2008-05-12'); // true
$validator->isValid('1999-11-11t22:23:52-02:00'); // false
$validator->isValid('2008-05-12T00:42:60+02:00'); // false
$validator->isValid('1999-13-11'); // false
$validator->isValid('2008-05-32'); // false
$validator->isValid('yesterday'); // false
Validates whether a string is valid for using as a 'loc'
element in a Sitemap XML document. This uses
Zend_Form::check() internally. Read more at
URI Validation.
Validates whether a value is valid for using as a 'priority' element in a Sitemap XML document. The value should be be a decimal between 0.0 and 1.0. This validator accepts both numeric values and string values.
Exemple 58.2. Sitemap Priority Validator
$validator = new Zend_Validate_Sitemap_Priority();
$validator->isValid('0.1'); // true
$validator->isValid('0.789'); // true
$validator->isValid(0.8); // true
$validator->isValid(1.0); // true
$validator->isValid('1.1'); // false
$validator->isValid('-0.4'); // false
$validator->isValid(1.00001); // false
$validator->isValid(0xFF); // false
$validator->isValid('foo'); // false
Retourne true si et seulement si la longueur de la chaîne
$value est supérieure à une valeur minimum et inférieure à une valeur
maximum (quand l'option max n'est pas à null). La méthode
setMin() lève une exception si la valeur fournie pour la longueur minimum
est supérieure à celle fournie pour la longueur maximum, et la méthode
setMax() lève une exception si la valeur fournie pour la longueur maximum
est supérieure à celle fournie pour la longueur minimum. Cette classe supporte l'UTF-8
et les autres encodages, en se basant sur la valeur courante de
iconv.internal_encoding
. Si vous avez besoin de régler un autre encodage, vous pouvez le faire avec
les accesseurs getEncoding() et setEncoding().
Search the Manual
Components
Languages Available
Translation Status Reports
View the current status report of Zend Framework manual translations.

![[Note]](/images/note.gif)