Avant de convertir une chaine en float via un cast (float), je veux être certain que le format de la chaine soit correcte.

Je n'accepte que :
- une chaine qui contient "entier(s).entier(s)" (test avec un preg_match)
- ou une chaine composée de caractères de 0 à 9 (j'utilise le ctype_digit qui fait ça simplement)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
function str_is_a_float ($arg_str)
{
$pattern ='`([0-9]{0,}+[.]+[0-9]{0,})`'; // float only
if(!(preg_match($pattern, $arg_str)|ctype_digit($arg_str))) return (FALSE); // float only or integer only
return (TRUE);
}
preg_match va trouver "4.5", mais aussi "nimportequoi4.5" ou "4.5nimportequoi"

Je n'arrive pas a placer une assertion avant et arrière pour n'autoriser que mon motif et seulement lui seul !