Classes de validation standardZend Framework est fourni avec un jeu de classes de validation standard, qui sont directement utilisables par votre application. AlnumZend_Validate_Alnum permet de valider des données contenant des caractères alphabétiques et des chiffres. Il n'y a pas de limite de taille. Options supportées par Zend_Validate_AlnumLes options suivantes sont supportées par Zend_Validate_Alnum :
Utilisation de baseVoici un exemple :
Utiliser les espacesPar défaut les caractères espaces ne sont pas acceptés car il ne font pas partie de l'alphabet. Cependant il existe un moyen de les accepter en entrée, ceci permet de valider des phrases complètes. Pour autoriser les espaces blancs vous devez passer l'option allowWhiteSpace. Ceci peut se faire à la création de l'objet ou ensuite au moyen des méthodes setAllowWhiteSpace() et getAllowWhiteSpace().
Utiliser des langues différentesEn utilisant Zend_Validate_Alnum, la langue que l'utilisateur précise dans son navigateur sera utilisée pour autoriser ou non certains caractères. Ainsi si l'utilisateur règle son navigateur sur de pour de l'allemand, alors les caractères comme ä, ö et ü seront eux aussi autorisés. Les caractères autorisés dépendent donc complètement de la langue utilisée. Il existe actuellement 3 langues qui ne sont pas supportées pour ce validateur. Il s'agit du coréen, du japonais et du chinois car ces langues utilisent un alphabet dans lequel un seul caractère est fabriqué à base de multiples caractères. Dans le cas où vous utilisez ces langues, seule l'alphabet anglais sera utilisé pour la validation. AlphaZend_Validate_Alpha permet de valider qu'une donnée ne contient que des caractères alphabétiques. Il n'y a pas de limite de taille. Ce validateur fonctionne comme le validateur Zend_Validate_Alnum à l'exception qu'il n'accepte pas les chiffres. Options suportées par Zend_Validate_AlphaLes options suivantes sont supportées par Zend_Validate_Alpha:
Utilisation de baseVoici un exemple de base:
Utiliser les espacesPar défaut les caractères espaces ne sont pas acceptés car il ne font pas partie de l'alphabet. Cependant il existe un moyen de les accepter en entrée, ceci permet de valider des phrases complètes. Pour autoriser les espaces blancs vous devez passer l'option allowWhiteSpace. Ceci peut se faire à la création de l'objet ou après au moyen des méthodes setAllowWhiteSpace() et getAllowWhiteSpace().
Utiliser des langues différentesEn utilisant Zend_Validate_Alpha, la langue que l'utilisateur précise dans son navigateur sera utilisée pour autoriser ou non certains caractères. Ainsi si l'utilisateur règle son navigateur sur de pour de l'allemand, alors les caractères comme ä, ö et ü seront eux aussi autorisés. Les caractères autorisés dépendent donc complètement de la langue utilisée. Il existe actuellement 3 langues qui ne sont pas supportées pour ce validateur. Il s'agit de coréen, japonais et chinois car ces langues utilisent un alphabet dans lequel un seul caractère est fabriqué à base de multiples caractères. Dans le cas où vous utilisez ces langues, seule l'alphabet anglais sera utilisé pour la validation. BarcodeZend_Validate_Barcode permet de vérifier si une donnée représente un code barres. Zend_Validate_Barcode supporte de multiples standards de codes à barres et peut être étendu pour les codes barres propriétaires. Les formats suivants sont supportés:
Options supportées par Zend_Validate_BarcodeLes options suivantes sont supportées par Zend_Validate_Barcode:
Utilisation classiquePour valider si une chaine est un code barres, vous devez juste connaitre son type. Voyez l'exemple suivant pour un EAN13:
Somme de contrôle optionnelleCertains codes barres proposent une somme de contrôle. Ils peuvent être valides sans cette somme mais si vous préciser celle-la alors elle devra être validée. Par défaut la somme de contrôle n'est pas activée. En utilisant l'option checksum vous pouvez indiquer si oui ou non la somme de contrôle doit être vérifiée.
Ecrire des validateurs personnalisésVous pouvez créer vos propres validateurs pour Zend_Validate_Barcode; ce qui est nécessaire si vous traitez des codes barres propriétaires. Vous aurez alors besoin des informations suivantes.
Votre validateur de code à barres personnalisé doit étendre Zend_Validate_Barcode_AdapterAbstract ou implémenter Zend_Validate_Barcode_AdapterInterface. Comme exemple, créons un validateur qui utilise un nombre pair de caractères pouvant être des chiffres et les lettres 'ABCDE'. Une somme de contrôle sera aussi calculée.
BetweenZend_Validate_Between permet de valider qu'une valeur soit bien comprise entre deux bornes.
Options gérées par Zend_Validate_BetweenLes options suivantes sont reconnues par Zend_Validate_Between:
Comportement par défaut de Zend_Validate_BetweenPar défaut ce validateur vérifie sur la valeur est entre min et max inclusivement pour les deux bornes.
Dans l'exemple ci-dessus, TRUE est retourné car par défaut les bornes supérieures et inférieures sont inclusives. Toute valeur depuis '0' à '10' sont donc autorisées et reconnues. '-1' et '11' auraient retourné FALSE. Validation exclusive sur les bornesIl peut être nécessaire d'exclure les bornes dans la validation. Voyez l'exemple qui suit:
L'exemple ci-dessus fait en sorte que '0' et '10' retournent FALSE. Callback (fonction de rappel)Zend_Validate_Callback permet de fournir une fonction de rappel utilisée pour valider la valeur. Options supportées par Zend_Validate_CallbackLes options suivantes sont supportées par Zend_Validate_Callback :
Utilisation classiqueLe plus simple est de posséder une fonction classique, qui sera utilisée pour valider la donnée. Soit la fonction ci-après :
Pour l'utiliser avecZend_Validate_Callback vous devez simplement effectuer votre appel comme ceci:
Utilisation avec les fonctions anonymes (closures)PHP 5.3 introduit les » fonctions anonymes ou fonctions de fermeture. PHP traite les fonctions anonymes comme des fonctions de rappel valides, et il est donc possible d'utiliser celles-ci avec Zend_Validate_Callback. Exemple:
Utilisation avec les méthodes de rappelBien sûr, il est aussi possible d'utiliser des méthodes de rappel:
La définition de la fonction de rappel se fait alors dans un tableau contenant un objet de la classe et la méthode à appeler:
Il est aussi possible d'utiliser une méthode statique comme fonction de rappel: Enfin, PHP 5.3 définit la méthode magique __invoke(). Si vous l'utilisez, alors un simple objet suffira comme fonction de rappel:
Ajouter des optionsZend_Validate_Callback permet d'utiliser des options, celles-ci seront alors passées comme argument supplémentaires à la fonction de callback. Soit la définition suivante:
Il extsite deux manières d'indiquer des options au validateur : via le constructeur ou sa méthode setOptions(). Via le constructeur, passez un tableau contenant les clés "callback" et "options": Sinon, vous pouvez passer les options après:
Si des valeurs supplémentaires sont passées à isValid() elles seront utilisées comme arguments supplémentaires lors de l'appel à la fonction de rappel, mais avant les options $options.
Lors de l'appel à la fonction de rappel, la valeur à valider sera toujours passée comme premier argument à la fonction de rappel suivie de toutes les autres valeurs passées à isValid(); les autres options suivront. Le nombre et le type d'options qui peuvent être utilisées est illimité. CreditCardZend_Validate_CreditCard permet de valider si une valeur est susceptible de représenter un numéro de carte de crédit. Une carte de crédit contient plein de données, incluant un hologramme, un numéro de compte, un logo, une date d'expiration, un code de sécurité et le nom du détenteur. L'algorithme qui vérifie la combinaison de ces données n'est connu que des entreprises délivrant les cartes et devrait être vérifié lors d'un paiement. Cependant, il est utile de savoir si le numéro de la carte est valable avant d'effectuer de telles vérifications complexes. Zend_Validate_CreditCard vérifie simplement que le numéro est bien formé. Dans les cas où vous possederiez un service capable d'effectuer des vérifications complètes, Zend_Validate_CreditCard vous permet de passer une fonction de rappel à utiliser si le numéro a été vérifié comme valide. Le retour de la fonction de rappel servira alors de retour général du validateur. Les institutions suivantes sont acceptées:
Options supportées par Zend_Validate_CreditCardLes options suivantes sont supportées par Zend_Validate_CreditCard :
Utilisation classiqueIl y a plusieurs institutions qui peuvent être validées par Zend_Validate_CreditCard. Par défaut, toutes les institutions connues sont acceptées:
L'exemple ci-dessus valide le numéro pour toutes les institutions connues. Accepter seulement certains types de cartesIl peut arriver que vous ne vouliez valider que certains types de cartes plutôt que toutes les institutions connues. Zend_Validate_CreditCard permet ceci. Pour utiliser une limite, spécifiez les institutions accéptées à l'initialisation ou après, grâce à setType(). Plusieurs arguments sont utilisables. Vous pouvez préciser une seule institution:
Plusieurs institutions se précisent au moyen d'un tableau:
Et comme pour tout validateur, vous pouvez passer un tableau global ou un objet Zend_Config. Dans ce cas, les institutions se précisent au moyen de la clé type:
Vous pouvez aussi configurer les institutions valides après la construction, au moyen des méthodes setType(), addType() et getType().
Validation par fonction de rappelComme déja dit, Zend_Validate_CreditCard ne valide que le numéro de la carte. Heureusement, certaines institutions proposent des APIs pour valider des numéros de carte de crédit qui ne sont pas publiques. Ces services sont très souvent payants, ainsi cette vérification est par défaut désactivée. Lorsque vous avez accès à de telles APIs, vous pouvez les utiliser comme fonctions additionnelles à Zend_Validate_CreditCard et ainsi augmenter la sécurité de la validation. Pour ce faire, vous devez simplement préciser une fonction de rappel qui sera appelée après que la validation "classique" ait réussi. Ceci évite un appel à l' API avec un numéro de toute façon non valide et augmentera ainsi les performances de la validation et donc de l'application. setService() et getService() sont utilisée pour la fonction de rappel. La clé de configuration à utiliser, si vous le souhaitez, est 'service' (à la construction). Des détails peuvent être trouvés sur la documentation du validateurCallback.
Ici le service sera appelé avec le numéro de carte comme premier paramètre, et les types accéptés comme second. Ccnum
DateZend_Validate_Date permet de valider qu'une donnée est bien une date. Le validateur gère la localisation. Options supportées par Zend_Validate_DateLes options suivantes sont supportées par Zend_Validate_Date:
Validation de dates par défautLa manière la plus simple de valider une date est d'utiliser le format par défaut du système. Ce format est utilisé lorsqu'aucune locale et aucun format particulier n'est précisé. Voyez l'exemple ci-après:
Le format par défaut de Zend_Validate_Date est 'yyyy-MM-dd'. Validation de dates localiséesZend_Validate_Date peut aussi valider les dates dans un format localisé donné. En utilisant l'option locale vous pouvez définir la locale utilisée pour valider le format de la date.
L'option locale affecte le format par défaut de la date. Dans l'exemple ci-dessus il s'agit de 'dd.MM.yyyy' qui est le format pour une locale 'de'. Formats de dates personnalisésZend_Validate_Date supporte des formats de date personnalisés. Utilisez l'option format pour cela.
Vous pouvez combiner format et locale. Dans ce cas vous pouvez utiliser des noms de mois ou de jours localisés.
Db_RecordExists et Db_NoRecordExistsZend_Validate_Db_RecordExists et Zend_Validate_Db_NoRecordExists permettent de vérifier si un enregistrement existe (ou pas) dans une table de base de données. Options supportées par Zend_Validate_Db_*Les options suivantes sont supportées par Zend_Validate_Db_NoRecordExists et Zend_Validate_Db_RecordExists :
Utilisation de baseVoici un exemple basique:
Le code ci-dessus vérifie la présence d'une adresse email $emailaddress vis à vis d'un champ d'une table de base de données.
Le code ci-dessus vérifie l'absence d'un nom d'utilisateur $username vis à vis d'un champ d'une table de base de données. Exclure des enregistrementZend_Validate_Db_RecordExists et Zend_Validate_Db_NoRecordExists proposent aussi un moyen de tester la base de données en excluant certaines parties de table, en passant une clause where ou un tableau de paires "champs" "valeur". Lorsqu'un tableau est passé, l'opérateur != est utilisé et vous pouvez ainsi tester le reste de la table.
L'exemple ci dessus va vérifier dans la table qu'aucun autre enregistrement que celui pour lequel id = $user_id ne contient la valeur $username. La clause d'exclusion peut aussi être renseignée avec une chaine afin de pouvoir utiliser un opérateur autre que !=.
L'exemple ci-dessus vérifie la table 'users' pour s'assurer qu'un seul enregistrement avec un nom $username et un email $email est valide. Adaptateurs de base de donnéesUn adaptateur spécifique peut être passé au validateur. Dans le cas contraire, il utilisera l'adaptateur déclaré comme étant celui par défaut:
Nom des bases de donnéesVous pouvez spécifier un nom de base de données (schéma) pour l'adaptateur PostgreSQL et DB/2 simplement grâce à un tableau possédant les clés table et schema. Voici un exemple :
DigitsZend_Validate_Digits valide si une donnée contient des chiffres. Options supportées par Zend_Validate_DigitsAucun option n'est gérée par Zend_Validate_Digits Valider des chiffresPour valider si une donnée ne contient que des chiffres et pas d'autre caractère, appelez simplement le validateur comme montré dans l'exemple suivant:
EmailAddressZend_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 baseVous trouverez ci-dessous un exemple d'utilisation basique
Ceci validera l'adresse mail $email et, en cas d'échec,
fournira des messages d'erreur informatifs via
Options for validating Email AddressesZend_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:
Parties locales complexes
Zend_Validate_EmailAddress validera toute adresse mail
conforme à la RFC2822. Comme par exemple Validation uniquement de la partie localeSi vous avez besoin de Zend_Validate_EmailAddress uniquement pour vérifier la partie locale d'une adresse mail, et que vous souhaitez désactiver la validation du nom d'hôte, vous pouvez spécifier le paramètre domain à la valeur false. Cela force Zend_Validate_EmailAddress à ne pas valider le nom d'hôte de l'adresse mail.
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 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 :
Vérification que le nom de domaine accepte réellement le courrielLe 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 (le courriel) existe dans le l'enregistrement du DNS pour le nom de domaine du courriel. Cela vous dit que le nom de domaine accepte le courriel, 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.
Alternativement vous pouvez passer soit TRUE soit
FALSE à 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. 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().
Warning
Performance warningYou 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.
Valider les noms de domaines internationauxZend_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.
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.
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. 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.
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. FloatZend_Validate_Float permet de valider si une donnée contient une valeur flottante. Les entrées localisées sont supportées. Options supportées par Zend_Validate_FloatLes options suivantes sont supportées par Zend_Validate_Float:
Validation float simpleAu plus simple, vous utiliserez les paramètres systèmes, c'est à dire la locale correspondant à l'environnement:
Dans l'exemple ci-dessus, nous supposons un environnement à locale "en". Validation float localiséeIl peut être parfois nécessire de prendre en compte la locale pour valider une valeur flottante. Les flottants sont souvent écrits de manière différente en fonction de la locale/région. Par exemple en anglais on écrirait "1.5", mais en allemand "1,5" et dans d'autres langues le regroupement de chiffres pourrait être utilisé. Zend_Validate_Float peut valider de telles notations. Il est alors limité à la locale utilisée. Voyez les exemples ci-après:
Comme vous le voyez, en utilisant une locale, l'entrée est validée en fonction de celle-ci. Avec une locale différente vous auriez obtenu des résultats éventuellement différents. La locale peut être affectée/récupérée après la création de l'objet de validation au moyen des méthodes setLocale() et getLocale(). GreaterThanZend_Validate_GreaterThan permet de valider qu'une valeur est plus grande qu'une autre (la borne).
Options supportées par Zend_Validate_GreaterThanLes options suivantes sont supportées par Zend_Validate_GreaterThan:
Utilisation de baseVoyez l'exemple ci-après.
L'exemple ci-dessus retourne TRUE pour toutes les valeurs égales ou supérieures à 10. HexZend_Validate_Hex permet de valider qu'un nombre ne contienne bien que des caractères hexadécimaux. Ce sont les caractères de 0 à 9 et de A à F insensibles à la casse. Il n'existe pas de limite de longueur de la chaine à valider.
Options supportées par Zend_Validate_HexIl n'y a pas d'options additionnelles supportées par Zend_Validate_Hex: HostnameZend_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 :
$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 :
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. Jusqu'à maintenant plus de 50 ccTLDs supportent les domaines IDN.
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
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( array( 'allow' => Zend_Validate_Hostname::ALLOW_DNS, 'idn' => 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->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. IbanZend_Validate_Iban valide si un nombre donnée est un numéro IBAN number. IBAN est l'abréviation de "International Bank Account Number". Options supportées par Zend_Validate_IbanLes options suivantes sont supportées par Zend_Validate_Iban:
Validation IBANLes numéros IBAN sont toujours relatifs à un pays. Ceci signifie que différents pays utilisent des formats différents de numéros IBAN. C'est la raison pour laquelle les numéros IBAN ont toujours besoin d'une locale. Sachant cela, nous savons déja utiliser Zend_Validate_Iban. Locale globale à l'applicationNous pourrions utiliser la locale globale à l'application. Ainsi si on ne passe aucune option à l'initialisation de Zend_Validate_Iban, celui-ci va chercher la locale globale. Voyez le code qui suit:
Validation IBAN simplifiéeIl peut arriver parfois que vous ayiez juste besoin de vérifier le format du numéro et s'il est un numéro IBAN. Vous ne voudriez pas utiliser un pays particulier pour valider. Ceci peut être réalisé en passant FALSE en tant que locale.
Ainsi tout numéro IBAN sera valide. Notez que ceci ne devrait pas être utilisé si vous ne supportez qu'un seul pays. Validation IBAN en fonction d'un paysPour valider par rapport à un pays/région, passez simplement la locale désirée. L'option locale peut alors être utilisée ou la méthode setLocale().
IdenticalZend_Validate_Identical vous permet de valider si une valeur donnée est identique à une valeur préalablement fournie. Options supportées par Zend_Validate_IdenticalLes options suivantes sont supportées par Zend_Validate_Identical :
Utilisation de basePour valider si deux valeurs sont identiques, vous devez d'abord fournir la valeur d'origine. L'exemple montre la validation de deux chaînes :
La validation retournera TRUE seulement si les deux valeurs sont rigoureusement identiques. Dans notre exemple, quand $value vaudra "origin". Vous pouvez aussi fournir la valeur souhaitée plus tard en utilisant la méthode setToken() et getToken() pour récupérer la valeur actuellement paramétrée. Objets identiquesBien sûr Zend_Validate_Identical ne se limite pas à la validation de chaînes, mais aussi tout type de variable comme un booléen, un entier, un flottant, un tableau et même les objets. Comme énoncé ci-dessus, les valeurs fournies et à valider doivent être identiques.
Configurationomme tous les autres validateurs Zend_Validate_Identical supporte aussi des paramètres de configuration en tant que paramètre d'entrée. Ceci veut dire que vous pouvez configurer ce validateur avec une objet Zend_Config. Mais ceci entraîne un changement dont vous devez tenir compte. Quand vous utilisez un tableau en tant qu'entrée du constructeur, vous devez envelopper la valeur d'origine avec la clé token, dans ce cas elle contiendra une valeur unique.
L'exemple ci-dessus valide l'entier 123 car vous avez fourni la valeur en l'associant à la clé token. Mais, si vous devez valider un tableau qui contient un seul élément et que cet élément est nommé token alors vous devez l'envelopper comme dans l'example ci-dessous : InArrayZend_Validate_InArray vous permet de valider qu'une entrée est bien présente dans un tableau. Ceci fonctionne aussi avec des tableaux multidimensionnels. Options supportées par Zend_Validate_InArrayLes options suivantes sont supportées par Zend_Validate_InArray :
Validation tableau simplePassez simplement un tableau dans lequel rechercher une valeur:
C'est le comportement exact de la fonction PHP in_array().
Bien sûr vous pouvez fournir le tableau à valider plus tard en utilisant la méthode setHaystack(). La méthode getHaystack() retourne le tableau actuellement fourni.
Validation tableau stricteIl est possible d'effectuer une validation stricte des données dans le tableau. Par défaut, il n'y aura aucune différence entre l'entier 0 et la chaine "0". La validation stricte fera cette différence. Pour spécifier une validation stricte à l'instanciation de l'objet, agissez comme suit : La clé haystack contient le tableau dans lequel valider. En mettant la clé strict à TRUE, la validation sera stricte (valeur et type). Bien sûr vous pouvez la méthode setStrict() pour changer ce réglage et la méthode getStrict() vous retournera le réglage en cours.
Validation de tableaux récursifsEn plus de la validation type PHP in_array(), ce validateur peut aussi être utilisé pour valider des tableaux à plusieurs dimensions. Pour cela, utilisez l'option recursive.
Votre tableau sera parcouru récursivement à la recherche de votre valeur. De plus vous pouvez utiliser la méthode setRecursive() pour paramétrer cette option plus tard et la méthode getRecursive() pour la retrouver.
IntZend_Validate_Int valide une valeur envers un entier. Les entiers localisés sont aussi gérés. Options supportées par Zend_Validate_IntLes options suivantes sont supportées par Zend_Validate_Int:
Validation simple d'entiersLa manière la plus simple de valider un entier est d'utiliser les paramètres systèmes. Lorsqu'aucune option n'est passée, la locale de l'environnement sera utilisée:
Dans l'exemple ci-dessus l'environnement est supposé réglé sur la locale "en". Comme vous le voyez, le regroupement de chiffres est supporté (troisième exemple). Validation d'entiers localisésIl est parfois nécessaire de valider des entiers localisés. Les entiers sont souvent écrits de manière différente en fonction des pays/régions. Par exemple en anglais vous pouvez écrire "1234" ou "1,234", ce sont tous les deux des entiers mais le regroupement des chiffres est optionnel. En allemand, vous écririez "1.234" et en français "1 234". Zend_Validate_Int peut valider de telles notations. Il est limité à la locale utilisée et valide le séparateur utilisé en fonction de la locale. Voyez le code ci-après:
Comme vous le voyez, avec une locale, l'entrée est validée en fonction de la locale. En utilisant l'anglais, vous récupérez FALSE lorsque la locale force une notation différente. La locale peut être affectée/récupérée après la création du validateur au moyen des méthodes setLocale() et getLocale(). IpZend_Validate_Ip permet de déterminer si une adresse IP donnée est valide. Le composant supporte IPv4 et IPv6. Options supportées par Zend_Validate_IpLes options suivantes sont supportées par Zend_Validate_Ip :
Utilisation classiqueVoici un exemple banal:
Valider IPv4 ou IPV6 seulesIl peut arriver de ne vouloir valider qu'un seul des deux formats. Par exemple si le réseau ne supporte pas IPv6, il serait idiot de demander une telle validation. Pour limiter Zend_Validate_Ip sur un seul des deux protocoles, utilisez les options allowipv4 ou allowipv6 et mettez les à FALSE. Il est possible d'effectuer celà au moyen du constructeur ou avec la méthode setOptions().
IsbnZend_Validate_Isbn permet de valider des valeurs ISBN-10 ou ISBN-13. Options supportées par Zend_Validate_IsbnLes options suivantes sont supportées par Zend_Validate_Isbn :
Utilisation classiqueVoici un exemple banal :
Ceci valide tout ISBN-10 et ISBN-13 sans séparateur. Configurer un type de validation ISBN expliciteVoici comment effectuer une restriction de type de l'ISBN :
Seules les valeurs de ISBN-13 sont validées ci-dessus. Les types valides sont :
Spécifier une restriction de séparateurVoici un exemple de restriction de séparateur :
Séparateurs valides :
LessThanZend_Validate_LessThan permet de valider qu'une donnée est bien inférieure à une borne. C'est l'opposé de Zend_Validate_GreaterThan.
Options gérées par Zend_Validate_LessThanLes options suivantes sont supportées par Zend_Validate_LessThan:
Utilisation de baseVoyez l'exemple ci-après.
L'exemple ci-dessus retourne TRUE pour toutes les valeurs égales ou inférieures à 10. NotEmptyCe validateur permet de déterminer si une valeur est non vide. C'est utile lorsque vous travaillez avec des formulaires ou des entrées utilisateur, là où vous pouvez l'utiliser pour savoir si des éléments requis ont été saisis. Options supportées par Zend_Validate_NotEmptyLes options suivantes sont supportées par Zend_Validate_NotEmpty :
Comportement par défaut de Zend_Validate_NotEmptyPar défaut, ce validateur fonctionne différement de la fonction PHP empty(). En particulier, ce validateur va évaluer l'entier 0 et la chaine '0' comme vides.
Changer le comportement de Zend_Validate_NotEmptyCertains projets ont des opinions différentes sur ce qui peut être considéré comme 'vide'. Une chaine seulement composée d'espaces blancs pourrait être considérée comme vide, ou 0 pourrait être considéré comme non-vide (surtout dans les séquences logiques booléennes). Pour correspondre aux différents besoins, Zend_Validate_NotEmpty vous permet de configurer les types que vous considérez comme vides. Les types suivants sont gérés :
Toute autre valeur passée retourne TRUE par défaut. Il existe différentes manières de selectionner les types ci-dessus. Vous pouvez en spécifier un ou plusieurs, sous forme de tableau ou de constantes ou encore de chaines. Voyez les exemples ci-après :
Il est aussi possible de passer un objet Zend_Config afin de préciser les types à utiliser. Après instantiation, setType() peut être utilisée. PostCodeZend_Validate_PostCode vous permet de déterminer si une valeur donnée est un code postal valide. Les codes postaux siont spécifiques aux villes et dans quelques cas spéciaux sont nommés des codes ZIP. Zend_Validate_PostCode reconnait plus de 160 différents formats de codes postaux. Pour sélectionner le format correct, il existe deux manières. Vous pouvez soit utiliser une locale complète, soit paramétrer votre propre format manuellement. Utiliser la locale est la méthode la plus commode puisque Zend Framework connait les formats des codes postaux assoicés à chaque locale cependant, vous devez utiliser une locale complète (c'est-à-dire contenant aussi le spécificateur de région) dans ce cas. Par exemple, la locale "fr" est une bien une locale mais ne peut pas être utilisée avec Zend_Validate_PostCode puisqu'elle ne contient pas la région ; "fr_FR" sera, cependant, une locale valide puisqu'elle spécifie une région ("FR", pour France).
Quand vous ne paramétrez pas de locale vous-même, alors Zend_Validate_PostCode utilisera la locale de l'application, ou, s'il n'y en a pas, la locale retournée par Zend_Locale.
Vous pouvez changer la locale plus tard en appelant setLocale(). Et bien sûr vous pouvez récupérer la locale courante avec getLocale().
Les formats de codes postaux sont simplement des chaînes d'expressions régulières. Quand le format de code postal international, qui est utilisé en paramétrant la locale, ne correspond pas à vos besoins, alors vous pouvez alors paramétrer manuellement un format en appelant setFormat().
Options du constructeurLe plus basiquement possible, vous fournissez soit un objet Zend_Locale, soit une chaîne représentant une locale complète au constructeur de Zend_Validate_PostCode.
De plus, vous pouve zfournir un tableau ou un objet Zend_Config au constructeur. Quand vous faîtes ceci, vous devez inclure soit la clé "locale" ou "format" ;celles-ci seront utilisées pour paramétrer les valeurs appropriées dans l'objet validateur.
Options supportées par Zend_Validate_PostCodeLes options suivantes sont supportées par Zend_Validate_PostCode :
RegexCe validateur valide si une chaine correspond à un motif d'expression régulière. Options supportées par Zend_Validate_RegexLes options suivantes sont supportées par Zend_Validate_Regex :
Validation avec Zend_Validate_RegexLa validation au travers d'expressions régulières est pratique, très utilisée et simple dans la mesure où elle vous évite la plupart du temps d'écrire votre propre validateur. Voyons quelques exemples :
Comme vous le voyez, le motif doit être passé avec la même forme que pour preg_match(). Pour plus de détails sur les expressions régulières, voyez » le manuel de PHP sur la syntaxe des motifs d'expressions PCRE. Gestion des motifsVous pouvez affecter / récupérer le motif après avoir crée le validateur en utilisant les méthodes setPattern() et getPattern().
Validateurs de SitemapLes validateurs suivant sont conformes au protocole » XML Sitemap. Sitemap_ChangefreqValide si oui ou non une chaîne utilisable en tant qu'élément "changefreq" dans un document XML Sitemap. Les valeurs valides sont : "always", "hourly", "daily", "weekly", "monthly", "yearly", or "never". Retourne TRUE si et seulement si la valeur est une chaîne et qu'elle vaut une dès fréquences ci-dessus. Sitemap_LastmodValide si oui ou non une chaîne utilisable en tant qu'élément "lastmod" dans un document XML Sitemap. L'élément "lasmod" doit contenir une date sous la forme W3C, optionnellement en omettant les informations concernant l'heure. Retourne TRUE si et seulement si la valeur est une chaîne et qu'elle est valide suivant le protocole. Example #1 Validateur de "lastmod" Sitemap
Sitemap_LocValide si oui ou non une chaîne utilisable en tant qu'élément "loc" dans un document XML Sitemap. Ceci utilise en interne la méthode Zend_Form::check(). Vous pouvez en lire davantage avec la validation d'URI. Sitemap_PriorityValide si oui ou non une valeur est utilisable en tant qu'élément "priority" dans un document XML Sitemap. La valeur doit être un nombre compris entre 0.0 et 1.0. Ce validateur accepte à la fois des valeurs numériques ou textuelles. Example #2 Validateur de "priority" Sitemap
Options supportées par Zend_Validate_Sitemap_*Il n'y a pas d'options supportées par ce validateur. StringLengthCe validateur vérifie la longueur d'une chaine de caractères.
Options gérées par Zend_Validate_StringLengthLes options suivantes sont reconnues par Zend_Validate_StringLength:
Comportement par défaut de Zend_Validate_StringLengthPar défaut, ce validateur vérifie qu'une valeur de chaine est bien entre min et max caractères. Pour min, la valeur par défaut est 0 et pour max c'est NULL ce qui signifie illimité. Ainsi par défaut, sans aucune option, ce validateur vérifie que la donnée traitée est bien une chaine. Limiter sur la borne supérieureLa borne supérieure se règle au moyen de l'option max. Ce doit être un entier.
Il est possible de préciser cette option plus tard, au moyen de la méthode setMax(). getMax() existe aussi.
Limiter sur la borne inférieureLa borne inférieure se règle au moyen de l'option min. Ce doit être un entier.
Il est possible de préciser cette option plus tard, au moyen de la méthode setMin(). getMin() existe aussi.
Limiter via les deux bornesQuelques fois, il est nécessaire de s'assurer que la chaine comprenne bien un nombre de caractères entre deux bornes min et max. Par exemple depuis un champ de formulaire représentant un nom, vous voudriez que l'utilisateur ne puisse saisir plus de 30 caractères mais au moins 3. Voyez l'exemple qui suit:
Encodage des valeursLes chaines se représentent toujours en considérant un encodage. Même si vous ne le précisez pas explicitement, PHP en utilise un. Si votre application utilise un encodage différent de celui de PHP, vous devrez alors le préciser. Vous pouvez passer votre propre encodage à l'initialisation grâce à l'option encoding, ou en utilisant la méthode setEncoding() . Nous supposons que votre installation utilise ISO ainsi que votre application. Dans ce cas, vous verrez le comportement suivant:
Si votre installation et votre application utilisent des encodages différents, vous deviez toujours préciser l'encodage vous-même.
|