eregi_replace et expressions régulières

eregi_replace et expressions régulières - PHP - Programmation

Marsh Posté le 07-08-2003 à 00:10:32    

salut à tous,
 
voilà mon chtit problème:
dans du texte saisi par un internaute, j'aimerais limiter la taille de tout les mots (ou expressions tordues...) à 26 caractères. facile me direz vous:
$mess = eregi_replace("([a-z0-9-]{26})", "\\1 " ,$mess);
 
ainsi, les mots sont coupés, un espace est rajouté. mais si le mec saisit un truc bien tordu, ce code ne marche plu du tout:
______________________________________________________________
_blah_blah_blah_blah_blah_blah_blah_blah_blah_blah_blah_blah
############################################################
 
etc... essayez, vous verrez!
vu que je maitrise pas trop les expressions régulières c'est chaud...
 
si vous avez une solution, je suis preneur!
 
par avance merci pour votre aide  :)


Message édité par Free_RideR_ le 07-08-2003 à 00:12:57

---------------
www.element62.com
Reply

Marsh Posté le 07-08-2003 à 00:10:32   

Reply

Marsh Posté le 11-08-2003 à 14:34:54    

la fonction wordwrap() le fait toute seule :)

Reply

Marsh Posté le 12-08-2003 à 10:40:31    

Bcp plus barbare, mais tellement plus personnalisable...

Code :
  1. <?
  2. $message="hahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa je vais foutre le bordel grâce à ma super-longue chaîne de caractères";
  3. $tab_mots = explode(" ", $message); 
  4. // nb mots dans la chaîne  
  5. $nb_mots = count($tab_mots); 
  6. $i = 0;
  7. while($i <= $nb_mots)
  8. {
  9. if(strlen($tab_mots[$i]) > 26)
  10. {
  11. $tab_mots[$i] = chunk_split("$tab_mots[$i]","26","-<br>" );
  12. $tab_mots[$i] = substr("$tab_mots[$i]", "strlen($tab_mots[$i])", "-5" );
  13. }
  14. $i++;
  15. }
  16. $message = implode(" ",$tab_mots);
  17. echo $message;
  18. ?>


Message édité par momo194 le 12-08-2003 à 10:42:23
Reply

Marsh Posté le 12-08-2003 à 10:55:06    

free_rider_ a écrit :


...limiter la taille de tout les mots (ou expressions tordues...) à 26 caractères. facile me direz vous:
$mess = eregi_replace("([a-z0-9-]{26})", "\\1 " ,$mess);
 
ainsi, les mots sont coupés, un espace est rajouté. mais si le mec saisit un truc bien tordu, ce code ne marche plu du tout:
______________________________________________________________
_blah_blah_blah_blah_blah_blah_blah_blah_blah_blah_blah_blah
############################################################
 
etc... essayez, vous verrez!
...


 
C'est normal que ça marche pas puisque ta regexp ne mouline que sur les alphanums avec trait d'union. Tout ce qui va sortir de ce pattern reste inchangé. Si tu veux inclure dans le traitement les # _ etc., faut élargir.
 
Edit1: Petite remarque, ton [a-z0-9-] me gêne un peu, je verrais plutôt [a-z0-9\-] car le moins doit être échappé.
 
Edit2: Ca donnerait quoi ça:
$mess = eregi_replace("[^ \f\r\t\n]{26}", "\\1 " ,$mess);


Message édité par ACut le 12-08-2003 à 11:11:20

---------------
NOUVEAU! Le guide de l'édition en version ebook : http://marcautret.free.fr/autret/150q-ebook/
Reply

Sujets relatifs:

Leave a Replay

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