web-dev-qa-db-fra.com

Comment supprimer tous les nombres de la chaîne?

Je voudrais supprimer tous les nombres d'une chaîne [0-9]. J'ai écrit ce code qui fonctionne:

$words = preg_replace('/0/', '', $words ); // remove numbers
$words = preg_replace('/1/', '', $words ); // remove numbers
$words = preg_replace('/2/', '', $words ); // remove numbers
$words = preg_replace('/3/', '', $words ); // remove numbers
$words = preg_replace('/4/', '', $words ); // remove numbers
$words = preg_replace('/5/', '', $words ); // remove numbers
$words = preg_replace('/6/', '', $words ); // remove numbers
$words = preg_replace('/7/', '', $words ); // remove numbers
$words = preg_replace('/8/', '', $words ); // remove numbers
$words = preg_replace('/9/', '', $words ); // remove numbers

Je voudrais trouver une solution plus élégante: 1 code de ligne (écrire un code Nice est important).

L'autre code que j'ai trouvé dans stackoverflow supprime également les signes diacritiques (á, ñ, ž ...).

50
Gago Design

Pour les nombres arabes occidentaux (0-9):

$words = preg_replace('/[0-9]+/', '', $words);

Pour tous les chiffres , y compris l'arabe occidental (par exemple indien ):

$words = '१३३७';
$words = preg_replace('/\d+/u', '', $words);
var_dump($words); // string(0) ""
  • \d+ correspond à plusieurs chiffres.
  • Le modificateur /u active le traitement de chaîne unicode. Ce modificateur est important, sinon les chiffres ne correspondraient pas.
122
Dan Lee

Essayez avec regex \d:

$words = preg_replace('/\d/', '', $words );

\d est un équivalent pour [0-9] qui est un équivalent pour les nombres vont de 0 à 9.

45
hsz

Utilisez des expressions rationnelles comme [0-9] ou \d:

$words = preg_replace('/\d+/', '', $words );

Vous voudrez peut-être lire la documentation preg_replace () car elle y est directement indiquée.

5
Veger

Utiliser des plages de caractères prédéfinies

echo $words= preg_replace('/[[:digit:]]/','', $words);

1
NaveenDA

Regex

   $words = preg_replace('#[0-9 ]*#', '', $words);
0
Dimpal Gohil