-
Remplacement de ereg
Bonsoir,
j'essaie de modifier un script que m'a fait un pote il y a déjà un certain nombre d'années, afin de supprimer les ereg et autre eregi devenu obsolètes :(
J'ai quelques notions de PHP, mais je ne suis pas développeur et j'ai un peu de mal avec les regex.
Alors voici ma première question. Je cherche à modifier ça :
Code:
$texte = !ereg('.', $var) ? $var : '';
si j'ai bien saisi, il y a la solution "sans réfléchir" qui doit fonctionner avec
Code:
$texte = !preg_match('#.#', $var) ? $var : '';
Sauf que j'ai le sentiment que l'on n'a pas franchement besoin d'une regex dans ce cas. Si je comprend le ereg vérifie juste qu'il y a au moins un caractère dans la chaine $var. Donc sa négation serait une variable sans aucun caractère ...
Est-ce que si je remplace par
Code:
$texte = strlen($var)==0 ? $var : '';
Est-ce que c'est équivalent au code d'origine ou est-ce que je dois redouter des problèmes de fonctionnement ?
Merci
-
Je dirais même que cette ligne ne fait du tout.
-
La traduction bête et méchante du ereg en preg est correcte. Par contre $texte = strlen($var)==0 ? $var : ''; n'est pas équivalent.
En effet si on considère $var = "\n\n\n";, la version regex donne $texte = "\n\n\n"; ( car le point ne match pas les nouvelles lignes ) alors que la version strlen (qui d'ailleurs est équivalente à $texte = '';) renverra on s'en doute $texte = '';
Donc d'après moi, le code d'origine a pour but de remplir $texte avec les nouvelles lignes de $var si ce dernier ne contient que des nouvelles lignes.
-
merci de vos réponses.
C'est vrai que je m'interrogeais aussi un peu sur l'utilité réel de cette ligne ... mais la vision de CosmoKnacki n'est pas inintéressante ...
Et là j'en ai un autre sur lequel je sèche ...
Code:
$flag = eregi('[\]', $name)
je ne comprends le fonctionnement du masque ... pour moi l'antislashe échappe le crochet fermant. Du coup on cherche quoi exactement ? (la traduction bête et méchante ne fonctionne pas et génère l'erreur "Compilation failed: missing terminating ] ")
En plus pourquoi un eregi, je ne vois pas de raison de se préoccuper de la case.
-
bon après différent tests, eregi('[\]', $string) ne cherche que l’antislash lui même, celui-ci n’échappant pas le crochet fermant dans le masque ereg ...
L'équivalent en preg_match serait preg_match('#[\\\]#', $string).
Cependant, pour juste vérifier la présence d'un \, je pense plutôt mettre un strpos($string, '\\').
Vous en pensez quoi ?
-
Ce sera incontestablement plus rapide.
-
ça confirme mon idée. Merci