Page 1 sur 1

Séparation de caractere alphabetique et numerique dans une chaine

Posté : 29 juil. 2015, 05:20
par topvision
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

Re: Séparation de caractere alphabetique et numerique dans une chaine

Posté : 29 juil. 2015, 08:23
par @rthur
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

Re: Séparation de caractere alphabetique et numerique dans une chaine

Posté : 29 juil. 2015, 08:53
par topvision
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

Re: Séparation de caractere alphabetique et numerique dans une chaine

Posté : 29 juil. 2015, 09:02
par @rthur
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

Re: Séparation de caractere alphabetique et numerique dans une chaine

Posté : 29 juil. 2015, 09:32
par topvision
$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?