Séparation de caractere alphabetique et numerique dans une chaine

Eléphanteau du PHP | 11 Messages

29 juil. 2015, 05:20

Bonjour
je voudrai séparer les caractères alphabétiques d'une part et numériques d'autres part d'un mot provenant d'un POST qui sont de type:
AB1 ou AB12 ou ABC1 ou ABC123 donc variable des lettres 2 a 3 puis 1 à 4 chiffres
avec substr il faut connaitre la position des caractères à l'avance ce qui n'est pas le cas ici.
Apres quelques recherche sur les regex j'ai fais ca
$mat= "AB123";
$str = (preg_match('#^([0-9]+)([0-9]+)$#',$mat)) ;
$str2 = (preg_match('#^([AZ]+)([Az]+)$#',$mat)) ;
print_r($str);
print_r($str2);
il m'affiche des 00

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 juil. 2015, 08:23

Bonjour,

Si ton format est toujours de la forme [LETTRES][CHIFFRES], alors voila un exemple de regex applicable :

Code : Tout sélectionner

^([A-Z]*)([0-9]*)$
Un conseil : il existe un super outil pour tester et réaliser ses regex, c'est regex101 : https://regex101.com/r/zC0wQ7/2
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

29 juil. 2015, 08:53

j'ai essayer mais il m'affiche 1 alors que je veux récupérer comme deux variables séparément de tel sorte que ;
$str = AB 
$str2 = 123

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 juil. 2015, 09:02

C'est normal, cf la doc de preg_match() :
Valeurs de retour
preg_match() retourne 1 si le pattern fourni correspond, 0 s'il ne correspond pas, ou FALSE si une erreur survient.
Pour récupérer les valeurs capturées, il faut que tu passes un 3ème paramètre à ta fonction qui va te renvoyer les données dans un tableau. Regarde les exemples de la doc, c'est ce qui fait avec la variable $matches
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

29 juil. 2015, 09:32

$mat= "AB32";
$str = (preg_match('#^([A-Z]*+)([0-9]*+)$#',$mat,$matches)) ;  
$str = $matches[1];
$str2 = $matches[2];
print_r($str."<br/> ".$str2);
Ca marche
En fait j'avais vu le matches sur la documentation mais je ne comprenais pas son rôle et c'est bien compris maintenant.
Merci pour tout! Que serions nous sans des gens comme vous?