Comment puis-je obtenir mon numéro dans une variable simple et non dans Array?
Bizboss
34
$ var = implode ('', $ correspond à [0]);
Gaurav
2
@Bizboss Dans la même veine, essayez $newstr = preg_replace('!\d+!', '', $str);. Il supprimera tous les chiffres de votre chaîne. Exemple: $str = 'In My Cart : 11 12 items';affichera In My Cart : items.
Aether
77
ce n'est pas un moyen respectueux des ressources. utiliser preg_replace("/[^0-9]/","",$string);oufilter_var($str, FILTER_SANITIZE_NUMBER_INT);
eapo
6
@eapo filter_var($str, FILTER_SANITIZE_NUMBER_INT);extrait les chiffres, signe plus et moins . L'expression régulière n'a extrait que des chiffres!
PATROMO
537
Si vous voulez simplement filtrer tout autre que les chiffres, le plus simple est d'utiliser filter_var :
Un tiret avant un nombre sera traité comme un moins.
Elnur Abdurrakhimov
43
Pas seulement avant le numéro. Tout +/- ne sera pas tronqué. Si vous avez, xxx-yyy-24vous obtiendrez --24. Vous pouvez utiliser str_repleace(array('+','-'), '', $result)pour supprimer les deux signes.
imclickingmaniac
4
@imclickingmaniac vous pouvez simplement faire à la max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))place en utilisant des tableaux et des remplacements de chaînes.
Eduard
2
utiliser max () renvoie également le signe moins dans les chaînes, espérons que strreplace () est l'option ici. Merci pour les conseils.
J'aime cela parce qu'il renvoie une chaîne, pas un tableau comme le font les exemples avec preg_match_all, et je l'aime parce que je veux juste des nombres, pas un signe plus ou un tiret, comme le fait l'exemple filter_var.
Darrell Duane
43
Attention à cette méthode: quelque chose comme 'In My Car_Price: 500.00imprimera:50000
ErickBest
16
@ErickBest C'est une bonne chose, étant donné que la question était extract the numbers from a string- un point décimal n'est pas un nombre!
rybo111
1
Ceci est un nitpick mais vous voulez probablement utiliser des guillemets simples 'et non des guillemets doubles ".
Cela fonctionne très bien. Il convertit la +387 (61) 634-783chaîne en 38761634783directement. Vous n'avez pas à vous occuper de tableaux comme la réponse de Gaurav.
Je préférerais utiliser ?comme quantificateur du point littéral. Je ne m'attendrais pas à ce qu'une valeur flottante contienne plusieurs symboles de virgule décimale. Ironiquement, le modèle commenté de Yash est faux . Le point a besoin d'une barre oblique devant pour le rendre littéral.
mickmackusa
11
Je ne possède pas le crédit pour cela, mais je dois juste le partager. Cette expression régulière obtiendra des nombres à partir d'une chaîne, y compris les points / lieux décimaux, ainsi que les virgules:
Cela ne valide pas la chaîne d'une virgule entre des ensembles de trois nombres entiers. ... le problème de copier-coller le modèle de quelqu'un d'autre et de ne pas le comprendre / le tester.
Il n'y a aucun avantage à écrire à l' \dintérieur d'une classe de caractères. Puisque vous accédez à la correspondance de chaîne complète, il est inutile d'écrire un groupe de capture dans le modèle.
Le premier argument implosé dans ce cas spécifique dit "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.
Quelque chose d'autre à noter est $ matches [0] est l'endroit où le tableau des correspondances (qui correspondent à cette expression régulière) trouvé est stocké.
$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
Ce script crée d'abord un fichier, écrit des nombres sur une ligne et passe à une ligne suivante s'il obtient un caractère autre que le nombre. Enfin, encore une fois, il trie les numéros dans une liste.
string1 ="hello my name 12 is after 198765436281094and14 and 124de"
f= open("created_file.txt","w+")for a in string1:if a in['1','2','3','4','5','6','7','8','9','0']:
f.write(a)else:
f.write("\n"+a+"\n")
f.close()#desired_numbers=[x for x in open("created_file.txt")]#print(desired_numbers)
k=open("created_file.txt","r")
desired_numbers=[]for x in k:
l=x.rstrip()print(len(l))if len(l)==15:
desired_numbers.append(l)#desired_numbers=[x for x in k if len(x)==16]print(desired_numbers)
Il n'est absolument pas nécessaire d'introduire des tirets dans ce processus. Cette réponse manque également d'une explication sur la façon dont cela fonctionne et pourquoi vous pensez que c'est une bonne idée.
Réponses:
la source
$newstr = preg_replace('!\d+!', '', $str);
. Il supprimera tous les chiffres de votre chaîne. Exemple:$str = 'In My Cart : 11 12 items';
afficheraIn My Cart : items
.preg_replace("/[^0-9]/","",$string);
oufilter_var($str, FILTER_SANITIZE_NUMBER_INT);
filter_var($str, FILTER_SANITIZE_NUMBER_INT);
extrait les chiffres, signe plus et moins . L'expression régulière n'a extrait que des chiffres!Si vous voulez simplement filtrer tout autre que les chiffres, le plus simple est d'utiliser filter_var :
la source
xxx-yyy-24
vous obtiendrez--24
. Vous pouvez utiliserstr_repleace(array('+','-'), '', $result)
pour supprimer les deux signes.max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))
place en utilisant des tableaux et des remplacements de chaînes.abs((int) filter_var($str, FILTER_SANITIZE_NUMBER_INT));
Cela devrait faire mieux! ...
la source
500.00
imprimera:50000
extract the numbers from a string
- un point décimal n'est pas un nombre!'
et non des guillemets doubles"
.En utilisant
preg_replace
:Sortie: 1111111111
la source
+387 (61) 634-783
chaîne en38761634783
directement. Vous n'avez pas à vous occuper de tableaux comme la réponse de Gaurav.+
quantificateur pour correspondre à des correspondances plus longues / moins de remplacements.Pour les nombres flottants,
Merci d'avoir signalé l'erreur. @mickmackusa
la source
'!\d*.?\d+!'
?
comme quantificateur du point littéral. Je ne m'attendrais pas à ce qu'une valeur flottante contienne plusieurs symboles de virgule décimale. Ironiquement, le modèle commenté de Yash est faux . Le point a besoin d'une barre oblique devant pour le rendre littéral.Je ne possède pas le crédit pour cela, mais je dois juste le partager. Cette expression régulière obtiendra des nombres à partir d'une chaîne, y compris les points / lieux décimaux, ainsi que les virgules:
/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/
Cité à partir d'ici:
php - regex - comment extraire un nombre avec décimal (point et virgule) d'une chaîne (par exemple 1,120.01)?
la source
Vous pouvez utiliser preg_match :
la source
echo '<p>'.$m[0].'</p>';
Utilisation de preg_replace
la source
+
quantificateur pour correspondre à des correspondances plus longues / moins de remplacements.Vous pouvez utiliser la fonction suivante:
la source
\d
intérieur d'une classe de caractères. Puisque vous accédez à la correspondance de chaîne complète, il est inutile d'écrire un groupe de capture dans le modèle.Le premier argument implosé dans ce cas spécifique dit "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.
Quelque chose d'autre à noter est $ matches [0] est l'endroit où le tableau des correspondances (qui correspondent à cette expression régulière) trouvé est stocké.
Pour plus de précisions sur les autres index du tableau, voir: http://php.net/manual/en/function.preg-match-all.php
la source
essayez ceci, utilisez preg_replace
DEMO
la source
[^0-9]
est plus simplement écrit comme\D
.Ou
Ou
Cela renverra uniquement la valeur numérique
la source
nous pouvons en extraire int comme
démo: http://sandbox.onlinephpfunctions.com/code/82d58b5983e85a0022a99882c7d0de90825aa398
la source
Suivez cette étape, il convertira la chaîne en nombre
Une autre façon de procéder:
la source
autre manière (chaîne unicode même):
la source
Ce script crée d'abord un fichier, écrit des nombres sur une ligne et passe à une ligne suivante s'il obtient un caractère autre que le nombre. Enfin, encore une fois, il trie les numéros dans une liste.
la source
Selon votre cas d'utilisation, cela peut également être une option:
Bien que je convienne d'une expression régulière ou
filter_var()
serait plus utile dans le cas indiqué.la source
pour utf8 str:
la source
la source
Cette fonction gérera également les nombres flottants
la source