Bonjour,
Je ne vois pas comment pourrais-je combiner les validateurs pour tester un type monétaire. Par exemple 5 ou 19,50 ?
Avez-vous une idée ?
Bonjour,
Je ne vois pas comment pourrais-je combiner les validateurs pour tester un type monétaire. Par exemple 5 ou 19,50 ?
Avez-vous une idée ?
Voilà ce que je test :
et voilà mon message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ->addValidator(new Zend_Validate_Regex('^[-+]?[0-9]*\.?[0-9]+$'),true, array('messages'=>'Entrer un format monétaire 0.00'))
Et voici ce qu'on trouve à la ligne 116
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Internal error matching pattern '^[-+]?[0-9]*\,?[0-9]+$' against value '1.00' C:\wamp\www\location\library\Zend\Validate\Regex.php à la ligne 116
J'utilise la version 1.5.0 et je ne vois pas pourquoi mettre if (false === $status) avec 3 === ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public function isValid($value) { $valueString = (string) $value; $this->_setValue($valueString); $status = @preg_match($this->_pattern, $valueString); if (false === $status) { /** * @see Zend_Validate_Exception */ require_once 'Zend/Validate/Exception.php'; throw new Zend_Validate_Exception("Internal error matching pattern '$this->_pattern' against value '$valueString'"); } if (!$status) { $this->_error(); return false; } return true; }
Je ne suis pas habitué à utiliser les expressions régulières, peut-être que l'erreur est logique ?
Bonjour,
les === signifient que les valeurs testées doivent être égales ET de même type (donc pas de conversion). Cela permet d'être sûr que $status a renvoyé false, et pas une valeur pouvant être convertie en false (comme 0).
Dans ce que tu postes, il y a quelque chose que je ne comprend pas : est-tu bien sûr de tester l'expression régulière '^[-+]?[0-9]*\.?[0-9]+$' et pas '^[-+]?[0-9]*\,?[0-9]+$' comme indiqué dans le message d'erreur, et qui explique pourquoi 1.00 n'est pas conforme (test de la virgule et pas du point) ?
J'applique l'expression régulière bien sur un '.', et le message d'erreur le montre bien. Par contre, je ne vois pas pourquoi j'entre dans le if=== car au pire, mon expression n'est pas conforme, non ?
Ha oui, en fait, c'est que j'ai fais plusieurs test, avec la virgule, le point. Mais quoi qu'il en soit, j'ai toujours le même message d'erreur.
Mais sur le principe, tu n'es pas d'accord que c'est bien le but du validateur de déterminer ou non si l'élément qui lui est fournit est au bon format et traiter l'erreur ?
Au temps pour moi, je n'avais pas assez bien regardé, ce n'est en effet pas normal. En fait, c'est que ton expression régulière n'est pas reconnue, et que la fonction php preg_match rencontre une erreur (c'est pour ça qu'elle renvoie false)...
Je vais essayer de regarder pourquoi...
Rebonjour,
en fait, il faut encadrer ton expression par des délimiteurs de pattern (exemple : slash) :
Et si tu veux limiter le nombre de décimales à 2 (en fait, 0, 1 ou 2) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ->addValidator(new Zend_Validate_Regex('/^[-+]?[0-9]*\.?[0-9]+$/'),true, array('messages'=>'Entrer un format monétaire 0.00'))
Code : Sélectionner tout - Visualiser dans une fenêtre à part ->addValidator(new Zend_Validate_Regex('/^[-+]?[0-9]*\.?[0-9]{0,2}$/'),true, array('messages'=>'Entrer un format monétaire 0.00'))
Hey, c'est trop merveilleux. Ca marche.
Pourtant je vais faire la fine bouche, le message d'erreur est
. Dans le code de ce validateur, j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 'f' does not match against pattern '/^[-+]?[0-9]*\.?[0-9]{0,2}$/'
Je ne trouve pas comment récupérer ce message et le mettre à ma sauce. Une idée peut-être ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 const NOT_MATCH = 'regexNotMatch'; protected $_messageTemplates = array( self::NOT_MATCH => "'%value%' does not match against pattern '%pattern%'" );
Voir le manuel du framework :
http://framework.zend.com/manual/fr/...ction.messages
Purée, tu es très fort !!!! Oui, j'avais raté ce passage dans la doc.
Voilà comment est créé mon validateur final :
Encore merci. N'empêche que je me demande comment tu as trouvé qu'il fallait mettre les '/' avant et après l'expression régulière.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $validator = new Zend_Validate_Regex('/^[-+]?[0-9]*\.?[0-9]{0,2}$/'); $validator->setMessage("La chaîne '%value%' n'est pas au format attendue, veuillez entrer par exemple 1.00", Zend_Validate_Regex::NOT_MATCH);
de rien
En consultant la doc de php
http://www.php.net/manual/fr/intro.pcre.php
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager