[PHP] - REG_ERANGE: invalid caracters ???

- REG_ERANGE: invalid caracters ??? [PHP] - PHP - Programmation

Marsh Posté le 16-06-2004 à 11:44:45    

Bonjours à tous,
 
Voila j'ai un proglème avec ma fonction ereg().
 
Erreur:

Code :
  1. Warning: REG_ERANGE:zinvalid character range in c:\program files\easyphp\www\critt_z3t\includes\fonctions.inc.php on line 64


 
Ligne concerné:

Code :
  1. 63 // Vérification du nom
  2. 64 if(!ereg("^(['-a-zA-Z]|[[:space:]]){3,}$", $NOM))
  3. 65 {


 
A tout hazard, vous ne savez pas d'où cela peut-il venir ?
 
Merci

Reply

Marsh Posté le 16-06-2004 à 11:44:45   

Reply

Marsh Posté le 16-06-2004 à 11:48:45    

le {3,}
 
manque un chiffre nan :??:

Reply

Marsh Posté le 16-06-2004 à 11:50:56    

non le {3,} ca ve dire minimum 3 caractères et maxi illimité
 
 
J'ai essayé sur une autre vérification:

Code :
  1. if(!ereg("^(['-_0-9a-zA-Z]|[[:space:]]){3,}$", $DOMAINE))
  2.  {
  3.  echo '<table cellspacing="0" cellpadding="10" border="0" width="560" align="center">
  4.    <tr>
  5.     <td class="t20" align="center">ERREUR DE SAISIE !!</td>
  6.    </tr>
  7.    <tr>
  8.     <td><b>Le domaine est invalide.</b><br><br>- Vous devez saisir au minimum 3 caractères.<br>- Seuls les lettres, chiffres, espaces, underscore "_" et tiret "-" sont autorisés<br><br><a href="javascript:history.back()">Retour</a></td>
  9.    </tr>
  10.    </table>';
  11.  exit();
  12.  }


 
Et ca fonctionne sans problème. En faite c'est le ' qu'il n'aime pas. Je ne comprend pas car au-dessus ca fonctionne.


Message édité par AlphaZone le 16-06-2004 à 11:53:10
Reply

Marsh Posté le 16-06-2004 à 11:54:30    

if(!ereg("^([\'-a-zA-Z]|[[:space:]]){3,}$", $NOM))  
 
et en l'echappant ?


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 16-06-2004 à 12:00:15    

Ca fonctionne pas ce cette manière :'(

Reply

Marsh Posté le 16-06-2004 à 12:05:20    

if(!ereg("^(['-_0-9a-zA-Z]|[:space:]){3,}$", $DOMAINE))  
 
 
comme ca ?


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 16-06-2004 à 12:08:07    

['-a-zA-Z]
 
Je vois le range '-a !
Je vois le range A-Z !
 
mais le range -z, c'est quoi ? :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-06-2004 à 12:09:57    

Mara's dad a écrit :

['-a-zA-Z]
 
Je vois le range '-a !
Je vois le range A-Z !
 
mais le range -z, c'est quoi ? :D


 
a mais uiiii biensûr   :o  
 
 :whistle:  
 
j'ai corrigé un ereg y'a 2 jours pour la même erreur en plus [:kiki]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 16-06-2004 à 16:13:37    

Mara's dad a écrit :

['-a-zA-Z]
 
Je vois le range '-a !
Je vois le range A-Z !
 
mais le range -z, c'est quoi ? :D


 
ben normalement c'est le caractère ' et ensuite un tiret et après l'alphabet en minuscule

Reply

Marsh Posté le 16-06-2004 à 17:01:25    

Je vien de faire des modifications:

Code :
  1. if(!ereg("^([_a-zA-Z[:space:]]|\\-){2,}$", $DOMAINE))


 
Ca accept les lettres de l'alphabet en minuscule et majuscule, les espaces, les tirets et l'underscore.
 
Maintenant j'aimerais autorisé le caractère '  
 
Je devrais faire comment ?
 
sur expreg.com c'est pas très bien expliqué.


Message édité par AlphaZone le 16-06-2004 à 17:08:18
Reply

Marsh Posté le 16-06-2004 à 17:01:25   

Reply

Marsh Posté le 16-06-2004 à 17:07:09    

if(!ereg("^(['-_0-9a-zA-Z]|[[:space:]]){3,}$", $DOMAINE))  
 
devient
 
if(!ereg("^([0-9a-zA-Z'_-]|[[:space:]]){3,}$", $DOMAINE))  
 
non ?


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 16-06-2004 à 17:08:50    

simogeo a écrit :

if(!ereg("^(['-_0-9a-zA-Z]|[[:space:]]){3,}$", $DOMAINE))  
 
devient
 
if(!ereg("^([0-9a-zA-Z'_-]|[[:space:]]){3,}$", $DOMAINE))  
 
non ?


 
Je vais tester cela.
 
 
J'ai testé et ca ne fonctionne toujours pas.


Message édité par AlphaZone le 16-06-2004 à 17:12:08
Reply

Marsh Posté le 16-06-2004 à 17:13:39    

lit ceci :
http://www.php.net/manual/fr/pcre.pattern.syntax.php
 
il y est expliqué que tu peux mettre un code hexa pour un caractère (paragraphe antislash)
 
remplace donc ' par \x27


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 16-06-2004 à 17:29:35    

T509 a écrit :

lit ceci :
http://www.php.net/manual/fr/pcre.pattern.syntax.php
 
il y est expliqué que tu peux mettre un code hexa pour un caractère (paragraphe antislash)
 
remplace donc ' par \x27


 
pourtant, normalement le ' n'est pas reservé ? [:meganne]
 
 


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 16-06-2004 à 17:29:46    

J'ai fais comme cela:
if(!ereg("^([_0-9a-zA-Z[:space:]]|\\-|\x27){3,}$", $NOM_ENT))
 
Ca ne fonctionne pas.

Reply

Marsh Posté le 16-06-2004 à 17:36:24    

^([-_0-9a-zA-Z\x20\x27]{3,})$
je ne comprends pas pourquoi tu introduit des conditions avec |
 
les (), c'est pour une séquence, les [] c'est pour une classe, {} se raporte à une classe et non pas à une séquence.
Juste avant tu disais
carcatères contenus dans _0-9a-zA-Z[:space:]
ou bien le tiret
ou bien le '
le tout sur 3 caractères mini
 
Tu comprendra que bonjour'madame ne pourra pas fonctionner


Message édité par T509 le 16-06-2004 à 17:37:13

---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 16-06-2004 à 17:39:34    

ereg, c'est de la daube :D
 
preg_match( "/^[0-9a-z_\\-\b\']{3,}$/i", "01-mmMP_'rt" ) -> 1


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-06-2004 à 17:40:43    

peut-etre que la syntaxe est bonne mais ne matche pas ce que tu souhaites réellement
 
 
c'est pas ca que tu veux ?
if(!ereg("^([0-9a-zA-Z\s'_-]){3,}$", $DOMAINE))  


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 16-06-2004 à 17:41:51    

peux tu nous expliquer ton motif ?


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 16-06-2004 à 17:42:24    

Faut que je me fasse une récapitulation:
Admettons j'ai mon email:
toto@titi.com
 
Ma 1ère séquence sera toto ? la 2ème titi et la 3ème com ?
Mais a quoi servent les classes ?
 
Quel est réellement la différence entre classe et sequence ?

Reply

Marsh Posté le 16-06-2004 à 17:43:43    

T509 a écrit :

peux tu nous expliquer ton motif ?


 
+1
 
mara's dad > dis lui pourquoi preg_match c'est mieux, sinon il a aucune raison de t'écouter :p ( moi j'men fous je l'sais déjà [:franck75] :D )


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 16-06-2004 à 17:46:20    

J'ai appliqué ta solution, et cela ne fonctionne pas.
 

Code :
  1. if(!ereg("^([-_0-9a-zA-Z\x20\x27]{3,})$", $DOMAINE))


 
que représente le x20 ?


Message édité par AlphaZone le 16-06-2004 à 17:46:44
Reply

Marsh Posté le 16-06-2004 à 17:47:04    

par hazard ton nom_ent retourne bien le mail? :)

Reply

Marsh Posté le 16-06-2004 à 17:48:29    

???

Reply

Marsh Posté le 16-06-2004 à 17:50:26    

http://www.php.net/manual/fr/ref.regex.php
C'est presque écrit NOIR sur BLANC que les expression régulières compatibles Perl sont mieux :D
Voir le commentaire de "mina86 at tlen dot pl" (deuxième commentaire) à propos de la vitesse d'execution re :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-06-2004 à 17:51:28    

Bon, sinon AlphaZone, tu cherches à faire quoi exactement ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-06-2004 à 17:52:40    

\x20 représente l'espace, cf la table ascii
un classe est un groupe de caractères authorisé, une séquence est un élément recherché
 
exemple une adresse mail est composé de 3 séquences : utilisateur, domaine et extension
tu peux faire correspondre chaque séquence à une classe ou alors la me^me classe pour toutes les séquences.


Message édité par T509 le 16-06-2004 à 17:53:39

---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 16-06-2004 à 17:56:00    

Mara's dad a écrit :

Bon, sinon AlphaZone, tu cherches à faire quoi exactement ?


 
Je cherche a restreindre l'accès au caractères spéciaux.
 
Plus précisement je cherche a autorisé les caractères normaux maj/minuscule ainsi que le tiret et l'underscore bien entendu l'espce et la strof ' doivent être compris dans cette autorisation.
 
a->z OK
A->Z OK
' OK
_ OK
- OK
<espace> OK
 
le reste ERREUR


Message édité par AlphaZone le 16-06-2004 à 18:00:19
Reply

Marsh Posté le 16-06-2004 à 17:56:21    

T509 a écrit :

\x20 représente l'espace, cf la table ascii
un classe est un groupe de caractères authorisé, une séquence est un élément recherché
 
exemple une adresse mail est composé de 3 séquences : utilisateur, domaine et extension
tu peux faire correspondre chaque séquence à une classe ou alors la me^me classe pour toutes les séquences.


 
merci de l'explication ca commence a devenir un peu plus clair
 
 
Sur la soluce que tu ma donné auparavant, tout fonctionne SAUF '
Est-ce bien x27 pour ' ??


Message édité par AlphaZone le 16-06-2004 à 17:59:59
Reply

Marsh Posté le 16-06-2004 à 18:19:56    

AlphaZone a écrit :

Je cherche a restreindre l'accès au caractères spéciaux.
 
Plus précisement je cherche a autorisé les caractères normaux maj/minuscule ainsi que le tiret et l'underscore bien entendu l'espce et la strof ' doivent être compris dans cette autorisation.
 
a->z OK
A->Z OK
' OK
_ OK
- OK
:espace: OK
 
le reste ERREUR


 
Ca j'avais compris, mais de temps en temps tu parles de NOM, d'autres fois de DOMAINE, et quelques-fois d'EMAIL.
 
Donc il s'agit de valider une adresse email c'est bien ça ?
 
Rqm, il ne me semble pas que l'espace et l'apostrophe soit autorisé dans une adresse email. En revanche pour le nom, le point l'est.
 
Exemple : "/^[\w_.-]+@[\w_.-]+\\.[\w]+$/" avec preg_match of course !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-06-2004 à 18:20:02    

vérifie sur la table ascii, mais oui je crois bien que le code hexa 27 correspond à '


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 16-06-2004 à 18:27:01    

Mara's dad a écrit :

Ca j'avais compris, mais de temps en temps tu parles de NOM, d'autres fois de DOMAINE, et quelques-fois d'EMAIL.
 
Donc il s'agit de valider une adresse email c'est bien ça ?
 
Rqm, il ne me semble pas que l'espace et l'apostrophe soit autorisé dans une adresse email. En revanche pour le nom, le point l'est.
 
Exemple : "/^[\w_.-]+@[\w_.-]+\\.[\w]+$/" avec preg_match of course !


 
Non c'est pas par rapport a une adresse email mais par rapport a un formulaire.
Les variables ne sont pas importante dans mon problème.
 
C'est ce fichu caractère ' qui m'aime pas.

Reply

Marsh Posté le 16-06-2004 à 18:31:03    

peut être une solution :
http://www.whisky.fr/index.php?par [...] er_by=prix
 
;) ;) ;)


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 16-06-2004 à 18:39:36    

effectivement ca aide.

Reply

Marsh Posté le 16-06-2004 à 18:46:18    

moi je ne comprends pas à quoi sert le double \\
donc peut être qu'en faisant ceci :
 ^([-_0-9a-zA-Z\\x20\\x27]{3,})$  


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed