Si j'ai les valeurs suivantes:
$var1 = AR3,373.31
$var2 = 12.322,11T
Comment puis-je créer une nouvelle variable et la définir sur une copie des données dont les caractères non numériques ont été supprimés, à l'exception des virgules et des points? Les valeurs ci-dessus renverraient les résultats suivants:
$var1_copy = 3,373.31
$var2_copy = 12.322,11
Je suis surpris qu'il n'y ait aucune mention de filter_var ici car il s'agit d'une question si ancienne ...
PHP a une méthode intégrée pour faire cela en utilisant filtres de nettoyage . Plus précisément, celui à utiliser dans cette situation est
FILTER_SANITIZE_NUMBER_FLOAT
avec lesFILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND
drapeaux. Ainsi:Il peut également être intéressant de noter que, comme il est intégré à PHP, il est légèrement plus rapide que l'utilisation de regex avec les bibliothèques actuelles de PHP (bien que littéralement en nanosecondes).
la source
Le moyen le plus simple de supprimer réellement tous les caractères non numériques:
\D
représente "tout caractère qui n'est pas un chiffre décimal"http://php.net/manual/en/regexp.reference.escape.php
la source
Vous pouvez utiliser
filter_var
pour supprimer tous les caractères illégaux à l'exception des chiffres, des points et de la virgule.FILTER_SANITIZE_NUMBER_FLOAT
filtre est utilisé pour supprimer tous les caractères non numériques de la chaîne.FILTER_FLAG_ALLOW_FRACTION
autorise le séparateur de fractions" . "
FILTER_FLAG_ALLOW_THOUSAND
pour obtenir une virgule de la chaîne.Code
Production
Pour en savoir plus sur les filtres filter_var () et Sanitize
la source
Si la demande est de supprimer tous les caractères non numériques (et pas seulement un), peut-être que le précédent peut être écrit comme ceci d'une manière très simple (mais vous pouvez écrire une fonction pour passer la chaîne et lui faire renvoyer la valeur nécessaire sans caractères .. en tous cas..):
la source
Si les lettres sont toujours au début ou à la fin, vous pouvez simplement utiliser trim ... aucune regex nécessaire
la source
Même réponse que middaparka mais supprimez le
,.
la source