web-dev-qa-db-fra.com

Extraire des nombres d'une chaîne

Je veux extraire les nombres d'une chaîne qui contient des nombres et des lettres comme:

"In My Cart : 11 items"

Je veux ici pour obtenir le nombre 11 ou tout autre numéro.

270
Bizboss
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);
301
Gaurav

Si vous voulez simplement filtrer tout ce qui est différent des nombres, le plus simple est d'utiliser filter_var :

$str = 'In My Cart : 11 items';
$int = (int) filter_var($str, FILTER_SANITIZE_NUMBER_INT);
457
Daniel Bøndergaard
preg_replace('/[^0-9]/', '', $string);

Cela devrait faire un meilleur travail ..!

242
Mahipalsinh Ravalji

Utiliser preg_replace:

$str = '(111) 111-1111';
$str = preg_replace('/\D/', '', $str);
echo $str;

Sortie: 1111111111 

67
Akash Deep

Pour les nombres flottants,

preg_match_all('!\d+\.*\d*!', $string ,$match);

Voir mon commentaire pour la regex mise à jour.

18
Yash

Utiliser preg_replace

$str = 'In My Cart : 11 12 items';
$str = preg_replace('/\D/', '', $str);
echo $str;
7
Hariadi

Vous pouvez utiliser preg_match :

$s = "In My Cart : 11 items";
preg_match("|\d+|", $s, $m);
var_dump($m);
6
Dmitri Gudkov

Vous pouvez utiliser la fonction suivante: 

function extract_numbers($string)
{
   preg_match_all('/([\d]+)/', $string, $match);

   return $match[0];
}
4
Jasmeen

essayez ceci, utilisez preg_replace

$string = "Hello! 123 test this? 456. done? 100%";
$int = intval(preg_replace('/[^0-9]+/', '', $string), 10);
echo $int;

DÉMO

2
Dave
preg_match_all('!\d+!', $some_string, $matches);
$string_of_numbers = implode(' ', $matches[0]);

Le premier argument implode dans ce cas spécifique indique "séparez chaque élément dans les correspondances [0] avec un seul espace". Implode ne mettra pas d'espace (ou quel que soit votre premier argument) avant le premier nombre ou après le dernier nombre.

Autre élément à noter: $ correspond [0] est l'emplacement où le tableau de correspondances (qui correspond à cette expression régulière) est stocké. 

Pour plus de précisions sur les autres index du tableau, voir: http://php.net/manual/en/function.preg-match-all.php

2
Bradley Kovacs

Une des méthodes simples que j'ai trouvée sans utiliser regex pour les débutants était:

 $string= "21321&*^&*^das";


                    $splitted=str_split($string); 

                   foreach ($splitted as $char){
                       if($char%1!=$char){
                           echo " ".$char;
                       }

                    }
0
Dhruv Thakkar

Si vous ne savez pas quel format est le nombre? int ou floating, utilisez ceci:

$string = '$125.22';

$string2 = '$125';

preg_match_all('/(\d+.?\d+)/',$string,$matches); // $matches[1] = 125.22

preg_match_all('/(\d+.?\d+)/',$string2,$matches); // $matches[1] = 125
0

Cette fonction gérera également les nombres flottants

$str = "Doughnuts, 4; doughnuts holes, 0.08; glue, 3.4";
$str = preg_replace('/[^0-9\.]/','-', $str);
$str = preg_replace('/(\-+)(\.\.+)/','-', $str);
$str = trim($str, '-');
$arr = explode('-', $str);
0
Khaldoon Masud
$value = '25%';

Ou

$value = '25.025$';

Ou

$value = 'I am numeric 25';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

Cela renverra uniquement la valeur numérique

0
Rakesh

on peut en extraire int comme 

$string = 'In My Car_Price : 50660.00';

echo intval(preg_replace('/[^0-9.]/','',$string));  # without number format   output: 50660
echo number_format(intval(preg_replace('/[^0-9.]/','',$string)));  # with number format  output :50,660

démo: http://sandbox.onlinephpfunctions.com/code/82d58b5983e85a0022a99882c7d0de90825aa398

0
user889030

Suivez cette étape, il convertira la chaîne en nombre

$value = '$0025.123';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
settype($onlyNumeric,"float");

$result=($onlyNumeric+100);
echo $result;

Une autre façon de le faire:

$res = preg_replace("/[^0-9.]/", "", "$15645623.095605659");
0
jewelhuq