IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Selection alphanumérique regex [Fait] [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 6
    Points
    6
    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

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    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

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 283
    Points : 11 742
    Points
    11 742
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    '~^([A-Z]+[0-9]|[0-9]+[A-Z])[0-9A-Z]$~D'
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, tu peux tester ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    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

  8. #8
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Select avec Regex (extraction chaine)
    Par tornade69 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 16/03/2012, 16h46
  2. Select + Update + Regex
    Par GouKen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/06/2008, 07h45
  3. select et REGEX
    Par JamesP dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/06/2008, 17h07
  4. [C#] Datatable.Select( regex )
    Par mikyfpc dans le forum Windows Forms
    Réponses: 0
    Dernier message: 29/08/2007, 12h22
  5. select max sur champ alphanumérique ?
    Par clawhammer dans le forum SQL
    Réponses: 3
    Dernier message: 16/10/2006, 15h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo