Pour le fun, je voulais mettre un plugin de calcul mathématique à mihiro (mon bot IRC, basé sur Botan), et j'étais naturellement confronté au souci de sécurité, étant donné que le calcul se fait par simple eval("\$resultat = ($calc);");... et pouf :

$calcul_presque_propre = preg_replace("/[^0-9+-\/*]/","",$texte);

Ceci supprime donc tout ce qui n'est pas chiffre, +, -, * ou /.

Mais quelle ne fut pas ma surprise de tenir une telle conversation (alors que tout le monde sait bien que 0318894273>0312547955) :

< Christophe971> !>0318894273-0312547955
< mihiro> 0318894273-0312547955 => -103758

...avant de découvrir que :

< Christophe971> !>42
< mihiro> 42 => 42
< Christophe971> !>042
< mihiro> 042 => 34

... et me voilà confronté à la terrible vérité : PHP traite tous les nombres commençant par zéro en base octale.

Et plutôt que de s'amuser à preg_match_all et à base_converter tout ce qu'il nous plait pas, un simple preg_replace répare ce terrible mal :

$calc = preg_replace("/([+-\/*]*)([0]+)([0-9]+)/","\\1\\3",$calcul_presque_propre);

Et voilà.