Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2008, 16h26   #1
Invité de passage
 
Inscription : août 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 7
Points : 3
Points : 3
Par défaut Selection alphanumérique regex

salut à tous , aprés avoir galérer avec les fonctions de chaines en php strpos strstr et compagnie , (j'avais fais des !is_bool(strpos($chaine,'0')) pour voir si un caractère était présent ) fin bref le fait est que

je dois rechercher si la chaine est alphanumérique sans caractère minucule donc aprés avoir fait le tuto du zéro j'avais penser à :
preg_match("[0-9A-Z][^a-z]" , $buffer))
seulement ca marche pas

quelle est la solution ? aussi quelle est la différence entre ereg et reg_match ?

merci
evil_Monkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 17h09   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Ce n'est pas ce que vous demandez dans votre expression (et au détail qu'il manque les délimiteurs) qui dit chercher un chiffre ou un caractère majuscule suivi d'un caractère qui n'est pas un caractère minuscule. La correction serait :
Code :
1
2
3
4
5
if (preg_match('~^[0-9A-Z]+$~D', $buffer)) {
    echo 'OK';
} else {
    echo 'KO';
}
Dans le sens où la valeur de $buffer doit contenir que des caractères numériques ou alphabétiques majuscules. On peut aussi écrire la même chose sous forme négative :
Code :
1
2
3
4
5
if (!preg_match('~[^0-9A-Z]~', $buffer)) {
    echo 'OK';
} else {
    echo 'KO';
}
Si la chaîne ne comporte aucun caractère différent (exprimé par la négation en PHP devant la fonction preg_match) des chiffres et caractères alphabétiques majuscules alors celle-ci est valide.

Pour la différence entre les fonctions ereg* et preg_* : elles ont des syntaxes différentes et surtout les premières sont à délaisser au profit des dernières pour des raisons de performances, de souplesse. Cela conduit petit à petit les fonctions POSIX (les premières), à leur sortie
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 09h46   #3
Invité de passage
 
Inscription : août 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 7
Points : 3
Points : 3
Salut julp merci pour cette réponse et pour la précision sur ereg / preg mais , j'ai du mal m'exprimer , en fait on selectionne bien les alphanumérique à majuscule mais qui doit forcément comporter au moins un chiffre et forcément comporter au moins une lettre majuscule mais on rejettre si l'expression comporte au moins une minuscule.

Si t'avais la réponse
merci
evil_Monkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 10h03   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Donc, soit l'expression commence par une ou plusieurs majuscule(s) et est suivie d'un chiffre, soit elle commence par un ou plusieurs chiffres suivis d'une majuscule. Dans les deux cas, elle se poursuit éventuellement par une séries de majuscules ou chiffres :

Code :
'~^([A-Z]+[0-9]|[0-9]+[A-Z])[0-9A-Z]$~D'
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 14h54   #5
Invité de passage
 
Inscription : août 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 7
Points : 3
Points : 3
salut antoun , merci de ta réponse , jme suis rendu compte que je me suis encore mal exprimé (c'est le selectionner que les alphanumérique qui doit porter a confusion)

en fait pour vous dire la génèse j'ai une liste de produit en txt dont je doit faire le découpage voic un extrait :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
.;HEDEN;;.
103G030018;Boitier moyen tour - 400 w Ivoire - B9202L1;00,00;1 an
103G030035;Boitier moyen tour - 480 w Noir  -  B9203CA;00,00;1 an
103G030036;Boitier moyen tour - 480 w Noir  -  B9907A9 Wind;00,00;1 an
.;.;;.
.;MAX IN POWER;;.
103M120004;Boitier Max in Power B9906 Noir - Sans Alim;00,00;5 ans
103M120005;Boitier Max in Power B9909 CA Noir - Sans Alim;00,00;5 ans
103M120006;Boitier Max in Power B9503 CA Noir - Sans Alim;00,00;5 ans
103M120003;Boitier Max in Power - 480 w Noir - BRIZA B9701CA;00,00;2 ans
Le formattage est le suivant ...
REFERENCE (10 caratères contenant que des majuscule et des chiffres) ; DESIGNATION (nb de char variable) ; PRIX (xx,yy) euros ; GARANTIE (z an(s))

fin bref c pas ca qui importe mais ; j'ais fait un tantque qui extrait 10 charactère du fichier jsuqu'a que celui ci correspond au critère de la référence (10 char uniquement maj et chiffre) mais j'arrive pas a voir ce que je veux.

Tout conseil est le bienvenu , si vous me conseillez de faire le découpage par ';' ou autre ; merci
dsl de vous embetter
evil_Monkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 20h02   #6
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 571
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 571
Points : 2 511
Points : 2 511
Salut, tu peux tester ça
Code :
1
2
3
4
5
6
7
8
<?php
$pattern = '#^([A-Z0-9]{10});([^;]*);([0-9]{2},[0-9]{2});([0-9]+ ans?)\s?$#';
$lines = file('data.txt');
foreach ($lines as $line) {
	if (!preg_match($pattern, $line, $matches)) continue;
	var_dump($matches);
}
?>
Bon développement
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

F.A.Q. : Java, PHP, (X)HTML / CSS

N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2008, 09h49   #7
Invité de passage
 
Inscription : août 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 7
Points : 3
Points : 3
Ohlala vraiment merci Nesmontou ca marche et sans aucune érreur encore une fois merci

a noter si ca peut aider quelqu'un ; si vous avez un fichier txt dont le formattage est douteu ou bcp parasité , si vous avez un fichier excel enregistrer le .csv ca donnera un fichier un fichier texte dont chaque ligne est la concaténation des colonnes entrecoupé par des point virgule , c'est le principe du csv (comma separated values = valeur séparés par virgules) et le formatage de votre fichier sera bcp plus distinct et donc plus facile à traiter.

salut
evil_Monkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2008, 16h14   #8
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 571
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 571
Points : 2 511
Points : 2 511
De rien

Sinon, pour infos, tu as aussi la fonction fgetcsv : http://www.php.net/manual/fr/function.fgetcsv.php (avec exemple)

Bonne continuation
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

F.A.Q. : Java, PHP, (X)HTML / CSS

N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h24.


 
 
 
 
Partenaires

Hébergement Web