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.
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);
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);
preg_replace('/[^0-9]/', '', $string);
Cela devrait faire un meilleur travail ..!
Utiliser preg_replace
:
$str = '(111) 111-1111';
$str = preg_replace('/\D/', '', $str);
echo $str;
Sortie: 1111111111
Pour les nombres flottants,
preg_match_all('!\d+\.*\d*!', $string ,$match);
Voir mon commentaire pour la regex mise à jour.
Utiliser preg_replace
$str = 'In My Cart : 11 12 items';
$str = preg_replace('/\D/', '', $str);
echo $str;
Vous pouvez utiliser preg_match :
$s = "In My Cart : 11 items";
preg_match("|\d+|", $s, $m);
var_dump($m);
Vous pouvez utiliser la fonction suivante:
function extract_numbers($string)
{
preg_match_all('/([\d]+)/', $string, $match);
return $match[0];
}
essayez ceci, utilisez preg_replace
$string = "Hello! 123 test this? 456. done? 100%";
$int = intval(preg_replace('/[^0-9]+/', '', $string), 10);
echo $int;
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
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;
}
}
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
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);
$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
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
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");