Code PHP pour supprimer tout sauf les nombres

135

J'essaye de tout supprimer d'une chaîne mais juste des nombres (0-9).

Je pensais que cela fonctionnerait.

echo preg_replace("[^0-9]","",'604-619-5135');

Mais il fait écho à "604-619-5135". Qu'est-ce que je rate???

Jeffkee
la source

Réponses:

277

Essaye ça:

preg_replace('/[^0-9]/', '', '604-619-5135');

preg_replace utilise des PCRE qui commencent et se terminent généralement par un /.

Chris Eberle
la source
Les guillemets intérieurs / doubles n'ont rien à voir avec PCRE tho. Apparemment (dans les jours précédents (?flags)) les personnes qui ont conçu / écrit la fonction / l'API ont pensé que c'était une bonne idée de passer les drapeaux de regex avec la /flagsforme entre guillemets au lieu d'utiliser un paramètre de fonction supplémentaire.
Qtax
6
@Qtax: bon point, ouais je sais que c'est de là que vient le mot "grep" ("g / re / p")
Chris Eberle
109

Ceci est pour les futurs développeurs, vous pouvez également essayer ceci. Simple aussi

echo preg_replace('/\D/', '', '604-619-5135');
Navneil Naicker
la source
41
Bonjour, je suis un développeur du futur. Cela a en effet bien répondu à nos besoins. Je vous remercie.
zesda
6
Je viens de plus loin dans le futur que Zesda et je peux le confirmer, c'est toujours une aide
myshadowself
3
Je suis revenu dans le futur et je peux confirmer qu'ils n'ont toujours pas trouvé de meilleur moyen.
Eoin
4
Je suis le tout dernier développeur d'un futur lointain. Je suis triste de dire que cela ne sert plus à rien. Vous n'auriez pas dû utiliser autant de pailles en plastique, croyez-moi, vous verrez quand vous arriverez ici ... Si vous réussissez.
Jeremy
2
Juste pour info: au 39ème siècle, nous l'utilisons encore.
user-44651 le
3

un moyen beaucoup plus pratique pour ceux qui ne veulent pas utiliser regex:

$data = filter_var($data, FILTER_SANITIZE_NUMBER_INT);

remarque: cela fonctionne également avec les numéros de téléphone.

Alp Altunel
la source