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 :

Fonction mb_substr() sur une variable contenant un $ [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 75
    Points
    75
    Par défaut Fonction mb_substr() sur une variable contenant un $
    Bonjour à tous,

    Je reçois des infos d'une BDD.
    Une des champs que je reçois peut contenir des '$'.
    Par exemple:
    '$TFKA1'
    Je souhaite faire divers tests sur cette chaine, j'ai donc cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rest = mb_substr($var, 1, 3, 'UTF-8');
    Je souhaite en effet récupérer les caractères 2, 3 et 4 pour vérifier qu'ils sont dans une liste de données "bannies".
    (dans cet exemple, ce serait pour savoir si 'TFK' est présent dans cette liste de données bannies)
    Mais apparemment, le '$' le gêne car le résultat retourné n'est pas bon.

    Comment feriez vous pour que le $ ne soit pas interprété (sachant que mettre un '\' parait difficile car tous les champs ne commencent pas par '$'.

    Est-ce que passer par des regex serait une solution? (j'ai regardé mais ça m'a été complexe de comprendre)
    Les regex me permettraient elles de ne pas interpréter ce '$'?

    Merci de votre aide,
    Benjamin.

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Ce code marche chez moi parfaitement bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var = '$TFKA1';
    $rest = mb_substr($var, 1, 3, 'UTF-8');
    echo $rest;
    Tu as bien entouré ta variable de guillemets simple, pas double ? Car sinon la chaîne est en effet interprêté, et remplacer par le nom de variable (qui n'existe pas ) et qui renvoie donc un résultat vide.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je crois que le problème est plutôt que seulement certains champs commencent par $ et que Super_carotte souhaite que sa vérification fonctionne qu'il ait ou non un $ au début.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    J'ai peut-être pas très bien compris dans ce cas là...

    Après si les '$' le gène, il suffit de les virer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rest = mb_substr(str_replace('$','',$var), 1, 3, 'UTF-8');
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Membre régulier
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 75
    Points
    75
    Par défaut
    Bonjour et merci pour vos réponses.

    Je ne peux pas mettre de guillemets car ma variable vient directement d'une BDD. c’était pour l'exemple que j’avais écrit $var = '$TFKA1';.
    Dans mon code, ça ressemble plutôt à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $test5 = substr($tab_value['r_job'], 1, 3, 'UTF-8');
    (la valeur vient de la colonne nommée 'r_job')

    Et en effet, je peux avoir des $ comme d'autre signes en début de chaine.
    exemple:
    $CYTWA
    £PACCF
    AEXTOG
    PORTOD

  6. #6
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Dans ce cas là, supprime tous les caractères non alpha numérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rest = preg_replace("/\W/", '', $var);
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  7. #7
    Membre régulier
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 75
    Points
    75
    Par défaut
    Mais je peux avoir des caractères spéciaux au milieu de ma chaine.

    du coup, si je souhaite bannir les chaines contenant "TFK" et que la chaine de départ est:
    ETF$KT

    si je prend la méthode de supprimer les caracteres spéciaux, cette chaine sera considéré comme a bannir alors qu'elle ne le devrait pas.

    N'y a t'il pas de solutions pour faire comprendre à PHP que si il y a des '$' dans mes noms de variable, il ne doit pas les interpréter?

  8. #8
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Ok, je crois qu'on va finir par y arriver...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $var = '$TFKA1';
     
    $rest = preg_match("/(TFK)+/", $var);
    echo $rest; // affiche 1
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  9. #9
    Membre régulier
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 75
    Points
    75
    Par défaut
    Merci, en effet, cette solution fonctionne.

    Toutefois, ce problème m'a fait me rendre compte que l'analyse de mon champs "r_job" n'est pas bonne a partir du moment où il y a un '$' dans la chaine.

    Par exemple,certaines fois, je dois récupérer les 2, 3 et 4° caractères de la chaine.

    comment faire ce découpage quand un '$' est dans la chaine?

    je souhaiterai juste savoir si une fonction gère les découpages malgré la possible présence de '$'.
    Si ce n'est pas le cas, je bidouillerai quelque chose et ferai ces modifications dans toute mon application.

    Merci encore Spartacusply pour ta réponse.

  10. #10
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Cette fonction vérifie que 'TFK' est présente n'importe où dans la chaîne, $ ou pas $.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  11. #11
    Membre régulier
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 75
    Points
    75
    Par défaut
    Bonjour,

    Merci beaucoup pour votre aide.

    Je pense que je vais traiter le problème différemment vue que je risque d'avoir d'autres soucis de ce genre.

    Je vais donc plutôt modifier tous les $ en @ dans ma bdd. (j'ai en effet le contrôle sur le fichier qui sert à peupler la bdd)

    (je marque le sujet résolu et +1 à votre réponse)

    Merci encore,
    Bonne continuation,
    Benjamin

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 22/01/2014, 19h30
  2. Fonction index ou find sur une variable multiple
    Par mohamed_ dans le forum SAS Base
    Réponses: 5
    Dernier message: 22/02/2013, 18h02
  3. agir sur une variable en fonction du choix du menu
    Par Alegreg dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/04/2011, 21h51
  4. Réponses: 3
    Dernier message: 22/09/2009, 21h34
  5. Réponses: 2
    Dernier message: 18/06/2007, 15h29

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