[PHP] regexp encore !!! :'(

regexp encore !!! :'( [PHP] - PHP - Programmation

Marsh Posté le 18-09-2002 à 14:36:06    

salut
j'ai des types de données qui doivent respecter des intervalles de définition,
par exemple:
 
integer doit être entre 0 et 255
 
sinteger doit être de -1 à 100 (par exemple, c pipo je sais ..) etc...
coment on fait pour pas devoir dénombrer tout, eskil ya un moyen de faire des range dans les regexp ???
merci bien :)


Message édité par k666 le 18-09-2002 à 15:19:25

---------------
mangez du mozilla c le futur, c votre DESTIN ! http://www.mozilla.org/releases/
Reply

Marsh Posté le 18-09-2002 à 14:36:06   

Reply

Marsh Posté le 18-09-2002 à 15:27:50    

:cry:  
 
si je veux faire une regexp pour matcher des signed integer de  
-32768 à 32767 ej fais comment ? :cry: :cry: !!!! :(:(:(:(:(:


---------------
mangez du mozilla c le futur, c votre DESTIN ! http://www.mozilla.org/releases/
Reply

Marsh Posté le 18-09-2002 à 15:29:55    

Je ne pense pas que ce soit possible, dans la mesure où les expressions régulières ne gèrent que les chaînes de caractères.

Reply

Marsh Posté le 18-09-2002 à 15:32:01    

1) Tu gardes que la partei numérique de cette chaine.
2) Tu transformes ta chaine en nombre (un simple 0+$var sufit emplement)
3) tu compare ton nombre avec els bornes de l'intervale.
 
JE vois pas plus simple. A la limite, la partie 2 peut être sauté mais j'en suis pas certain.

Reply

Marsh Posté le 18-09-2002 à 15:32:28    

mais ya pourtant [0-9] :(
pourquoi ya pas [0-255] et d'autre strucs :(
zut alors :(:(:(


---------------
mangez du mozilla c le futur, c votre DESTIN ! http://www.mozilla.org/releases/
Reply

Marsh Posté le 18-09-2002 à 15:35:05    

omega2 a écrit a écrit :

1) Tu gardes que la partei numérique de cette chaine.
2) Tu transformes ta chaine en nombre (un simple 0+$var sufit emplement)
3) tu compare ton nombre avec els bornes de l'intervale.
JE vois pas plus simple. A la limite, la partie 2 peut être sauté mais j'en suis pas certain.




 
malheureusement vu comment est foutue mon appli je peux pas faire ça :( la seule chose que je peux c tchecker la chaine directement telle quelle à une regexp et savoir si trou ou folse


---------------
mangez du mozilla c le futur, c votre DESTIN ! http://www.mozilla.org/releases/
Reply

Marsh Posté le 18-09-2002 à 15:35:20    

k666 a écrit a écrit :

mais ya pourtant [0-9] :(
pourquoi ya pas [0-255] et d'autre strucs :(
zut alors :(:(:(



[0-9], c'est les caractères '0' à '9' et non pas les nombre 0 à 9. ;)
Si tu veux faire joujou, avec php une des fonctions utilisant des regexp peut utiliser une fonction pour savoir comment remplacer la chaine trouvé. Là, t'auras que des chiffres si tu fais des [0-9] ou équivalent dans ta regexp.

Reply

Marsh Posté le 18-09-2002 à 15:36:23    

:cry:  :cry: j'ai pas envie de me taper la regexp de malade  :cry:  :cry: à l'aide  :cry:


---------------
mangez du mozilla c le futur, c votre DESTIN ! http://www.mozilla.org/releases/
Reply

Marsh Posté le 18-09-2002 à 15:36:33    

k666 a écrit a écrit :

 
 
malheureusement vu comment est foutue mon appli je peux pas faire ça :( la seule chose que je peux c tchecker la chaine directement telle quelle à une regexp et savoir si trou ou folse



Et tu peux pas faire une fonction qui vérifiera ta chaine et te retourne true ou false? (j'ai pas le code de ton applis sous les yeux alors je sais pas si c'est fesable)


Message édité par omega2 le 18-09-2002 à 15:37:15
Reply

Marsh Posté le 18-09-2002 à 15:39:55    

bin en fait j'ai défini plein de constantes avec les type utilisables dans l'appli
 
 


 
 
// on définit toutes les constante de code erreur cmi
define("CMI_NO_ERROR",0);
define("CMI_GENERAL_EXCEPTION",101);
define("CMI_INVALID_ARGUMENT_ERROR",201);
define("CMI_CANNOT_HAVE_CHILDREN",202);
define("CMI_NOT_ARRAY",203);
define("CMI_NOT_INITIALIZED",301);
define("CMI_NOT_IMPLEMENTED",401);
define("CMI_INVALID_SET_VALUE",402);
define("CMI_ELEMENT_READ_ONLY",403);
define("CMI_ELEMENT_WRITE_ONLY",404);
define("CMI_INCORRECT_DATA_TYPE",405);
 
// on définit les types de données acceptées par le modèle
define("TYPES_CMIBLANK","/^$/" );
define("TYPES_CMIBOOLEAN","/^(true|false)$/" );
define("TYPES_CMIDECIMAL","/^\-?[0-9]+(\.[0-9])?[0-9]*$/" );
define("TYPES_CMIFEEDBACK","/^.*$/" );
define("TYPES_CMIIDENTIFIER","/^\w{0,255}$/" );
define("TYPES_CMIINTEGER","/^[0-9]{0,65536}$/" );
define("TYPES_CMISINTEGER","/^(\-|\+)[0-9]{0,32768}$/" );
define("TYPES_CMISTRING255","/^.{0,255}$/" );
define("TYPES_CMISTRING4096","/^.{0,4096}$/" );
define("TYPES_CMITIME","/^(([0-1][0-9])|2[0-3])):[0-5][0-9]:[0-5][0-9](\.[0-9]{1,2})?$/" );
define("TYPES_CMITIMESPAN","/^[0-9]{1,4}:[0-5][0-9]:[0-5][0-9](\.[0-9]{1,2})?$/" );
define("TYPES_CMIVOCABULARY_mode","/^(normal|review|browse)$/" );
define("TYPES_CMIVOCABULARY_status","/^(passed|completed|failed|incomplete|browsed)$/" ); // |not attempted inséré à l'init
define("TYPES_CMIVOCABULARY_exit","/^(time\-out|suspend|logout)?$/" );
define("TYPES_CMIVOCABULARY_credit","/^(credit|no\-credit)$/" );
define("TYPES_CMIVOCABULARY_entry","/^(ab\-initio|resume)?$/" );
define("TYPES_CMIVOCABULARY_interaction","/^(true\-false|choice|fill\-in|matching|performance|likert|sequencing|numeric)$/" );
define("TYPES_CMIVOCABULARY_result","/^(correct|wrong|unanticipated|neutral)|(\-?[0-9]+(\.[0-9])?[0-9]*)$/" );
 


 
et après je fais un check vite fait
 
par exemple:
 


 function core666credit($value = NULL)
 {
 
  $access_type = "READ";
  $data_type = TYPES_CMIVOCABULARY_credit;
  $state = $this->checkState($access_type,$data_type,$value);
  if ( $state->errorCode() != CMI_NO_ERROR )  
  {
   return $state;
  }
 
  $returned = new cmireturn();
  $returned->errorCode(CMI_NO_ERROR);
  $returned->returnValue("no-credit" );
  $returned->debugData("core.credit passed , will always return 'no-credit' (hard-coded)" );
  return $returned;
 }
 


 
 
c la fonction checkState qui est très générique et qui tcheck le bordel,
et je peux pas la compliquer paske ça va être le bordel :(
 
 
donc peux pas faire de trucs cheloux :(


---------------
mangez du mozilla c le futur, c votre DESTIN ! http://www.mozilla.org/releases/
Reply

Marsh Posté le 18-09-2002 à 15:39:55   

Reply

Marsh Posté le 18-09-2002 à 15:40:41    

ji soui nikaid


---------------
mangez du mozilla c le futur, c votre DESTIN ! http://www.mozilla.org/releases/
Reply

Marsh Posté le 18-09-2002 à 15:43:38    

k666 a écrit a écrit :

mais ya pourtant [0-9] :(
pourquoi ya pas [0-255] et d'autre strucs :(
zut alors :(:(:(



Parce que [0-9] ça repère tous les *chiffres* de 0 à 9, pas les *nombres*
 
Cela dit on peut faire comme ça pour les entiers de 0 à 32767
([1-2]?[0-9]{0,4})|(3[0-1][0-9]{3})|(32[0-6][0-9]{2})|(327[0-5][0-9]|3276[0-7])

Reply

Marsh Posté le 18-09-2002 à 15:46:33    

Donc il te reste plus qu'à faire une fonction dérivé de celle ci, qui utilise celle ci et qui fait ensuite des tests complémentaires.
Je vois que ça pour le moment.

Reply

Marsh Posté le 18-09-2002 à 15:47:24    

gm_superstar a écrit a écrit :

 
Parce que [0-9] ça repère tous les *chiffres* de 0 à 9, pas les *nombres*
 
Cela dit on peut faire comme ça pour les entiers de 0 à 32767
([1-2]?[0-9]{0,4})|(3[0-1][0-9]{3})|(32[0-6][0-9]{2})|(327[0-5][0-9]|3276[0-7])



:o J'avais pas pensé à aussi simple moi. :o

Reply

Marsh Posté le 18-09-2002 à 16:01:00    

:jap:

gm_superstar a écrit a écrit :

 
Parce que [0-9] ça repère tous les *chiffres* de 0 à 9, pas les *nombres*
 
Cela dit on peut faire comme ça pour les entiers de 0 à 32767
([1-2]?[0-9]{0,4})|(3[0-1][0-9]{3})|(32[0-6][0-9]{2})|(327[0-5][0-9]|3276[0-7])



:jap:


---------------
mangez du mozilla c le futur, c votre DESTIN ! http://www.mozilla.org/releases/
Reply

Sujets relatifs:

Leave a Replay

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