web-dev-qa-db-fra.com

PHP expression régulière - numéro de filtre uniquement

Je sais que cela peut sembler une question vraiment fictive, mais j'essaie de m'assurer que la chaîne fournie est d'un format numérique/décimal pour pouvoir l'utiliser ultérieurement avec la fonction number_format () de PHP.

Comment pourrais-je le faire - disons que quelqu'un tape 15h00 dans le champ de texte - quelle expression régulière et quelle fonction php devrais-je utiliser pour supprimer les points-virgules et lui faire retourner uniquement les caractères valides.

preg_match () retourne un tableau - donc je ne peux pas transmettre le résultat à number_format () à moins que je ne l'implode () ou quelque chose comme ça.

Votre aide serait très appréciée.

36
user398341

Utiliser is_numeric ou intval est probablement le meilleur moyen de valider un nombre, mais pour répondre à votre question, vous pouvez utiliser plutôt preg_replace . Cet exemple supprime tous les caractères non numériques:

$output = preg_replace( '/[^0-9]/', '', $string );
110
buley

Pour supprimer tout ce qui n'est pas un nombre:

$output = preg_replace('/[^0-9]/', '', $input);

Explication:

  • [0-9] correspond à n'importe quel nombre compris entre 0 et 9 inclus.
  • ^ annule un modèle [].
  • Donc, [^0-9] correspond à tout ce qui n'est pas un nombre, et puisque nous utilisons preg_replace, ils seront remplacés par rien '' (second argument de preg_replace).
38
netcoder

Vous pouvez essayer celui-là:

$string = preg_replace('/[^0-9]/', '', $string);

À votre santé.

6
SileNT

utilisez la fonction php is_numeric intégrée pour vérifier si la valeur est numérique.

2
Headshota

Vous pouvez faire quelque chose comme ceci si vous ne voulez que des nombres entiers.

function make_whole($v){
    $v = floor($v);
    if(is_numeric($v)){
      echo (int)$v;
      // if you want only positive whole numbers
      //echo (int)$v = abs($v);
    }
}
0
toystory