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

JavaScript Discussion :

bug fonction replace


Sujet :

JavaScript

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 433
    Points : 5 788
    Points
    5 788
    Billets dans le blog
    1
    Par défaut bug fonction replace
    Bonsoir,

    j'utilise un code js qui bugge pour certaines valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var unitFont = sizeFont.replace(/(.[0-9])/g, '');
    sizeFont contient un nombre suivi d'une unité ; cette fonction est donc censée isoler l'unité, mais elle ne marche pas si le nombre contient un seul caractère.
    Exemple : 9pt -> 9pt
    alors que 10pt -> pt

    Quel est le souci ?

  2. #2
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeFont.replace( /([0-9]*)/g , '');

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 433
    Points : 5 788
    Points
    5 788
    Billets dans le blog
    1
    Par défaut
    Merci de ton aide.

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Pour info
    recherche n'importe quel caractère (le ".") puis un chiffre.
    S'il n'y a qu'un seul chiffre, il n'est donc pas précédé de n'importe quel caractère et ton expression ne trouve pas de correspondance.
    Du coup,
    bug fonction replace
    le bug ne se trouve pas là où tu pensais...

    @Will : le quantificateur ("*") n'est pas particulièrement utile du fait du drapeau "g", ni d'ailleurs le groupe capturant (vu qu'on ne se sert pas des éléments capturés)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeFont.replace( /[0-9]/g , '');
    est donc largement suffisant, voire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeFont.replace( /\d/g , '');

  5. #5
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par Bovino Voir le message
    @Will : le quantificateur ("*") n'est pas particulièrement utile du fait du drapeau "g", ni d'ailleurs le groupe capturant (vu qu'on ne se sert pas des éléments capturés)
    Arg, oui, les RegExp sont et resteront toujours MA bête noire !
    Tu viens de gâcher mon plaisir de pour une fois avoir su apporter une réponse à une RegExp.

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeFont.replace( /[0-9]/g , '');
    est donc largement suffisant, voire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeFont.replace( /\d/g , '');
    il faut néanmoins tenir compte de l'unité en em qui est souvent utilisée avec des nombres décimaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var unitFont = sizeFont.replace(/[.,0-9]/g, '');
    ou un truc pas loin...

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 433
    Points : 5 788
    Points
    5 788
    Billets dans le blog
    1
    Par défaut
    Merci pour vos réponses, mais comme je ne m'y connais pas tellement, j'aurais besoin de quelques explications :
    - le /g sert à quoi ?
    - le * de Willpower, il fait quoi ?
    - explication de la regexp de NoSmoking, et quelle est la particularité des em ?

  8. #8
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Merci pour vos réponses, mais comme je ne m'y connais pas tellement, j'aurais besoin de quelques explications :
    - le /g sert à quoi ?
    - le * de Willpower, il fait quoi ?
    - explication de la regexp de NoSmoking, et quelle est la particularité des em ?
    /g = toutes les occurences (au lieu de la première)
    sauf que dans mon cas :
    * = 0,1 ou plusieurs fois ce qui précède, signifie qu'on remplace toute la suite de chiffre et donc l'un des deux "/g" ou "*" est inutile.

    em and ex - relative to the parent element
    pixels - relative to the screen resolution

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    - explication de la regexp de NoSmoking, et quelle est la particularité des em ?
    cela me disais quelque chose...
    http://www.developpez.net/forums/d11...m/#post6404476

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 433
    Points : 5 788
    Points
    5 788
    Billets dans le blog
    1
    Par défaut
    Oui, ce n'est pas la première fois que je pose une question au sujet des em, mais là, c'est la regexp /[.,0-9]/g que je ne comprends pas.

  11. #11
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Oui, ce n'est pas la première fois que je pose une question au sujet des em, mais là, c'est la regexp /[.,0-9]/g que je ne comprends pas.
    En fait, ton . vaut comme "joker", si tu veux signaler un point tu dois faire \. donc au final ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "1.12px".replace(/[\.\,0-9]/g, '');

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    Citation Envoyé par Willpower Voir le message
    En fait, ton . vaut comme "joker", si tu veux signaler un point tu dois faire \. donc au final ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "1.12px".replace(/[\.\,0-9]/g, '');
    entre crochets le . (point) vaut le caractère point, je dois admettre que la virgule est de trop, les décimaux s'exprimant avec un . (point) et non une virgule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var unitFont = sizeFont.replace(/[.0-9]/g, '');
    à voir dans la Quels éléments trouve-t-on dans une expression régulière ?

  13. #13
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 433
    Points : 5 788
    Points
    5 788
    Billets dans le blog
    1
    Par défaut
    Merci pour l'explication.
    Juste pour être sûr de comprendre : le slash avant la virgule, c'était juste pour l'échapper et si tu n'en mets pas dans [.0-9]/g, c'est que en tout début d'une liste de caractères entre crochets, l'échappement n'est pas nécessaire ?

  14. #14
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    En direct live de Quels éléments trouve-t-on dans une expression régulière ?
    Les crochets :
    Les crochets correspondent à des classes (ou ensembles) de caractères. On place à l'intérieur tous les caractères que l'on attend à l'emplacement donné de la chaîne.
    ...
    Notez que le caractère tiret ("-") permet d'indiquer une plage de caractères (par exemple, /[a-z]/ correspond à toutes les lettres de "a" à "z"). Si vous devez rechercher le caractère tiret, vous devrez l'échapper en le faisant précéder d'un antislash ("\"). Une autre possibilité est de placer le tiret en début ou en fin de classe, dans ce cas, il perd sa signification (par exemple /[-abc]/ pour rechercher les caractères tiret, a, b ou c.

  15. #15
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 433
    Points : 5 788
    Points
    5 788
    Billets dans le blog
    1
    Par défaut
    Oui, OK, mais ce "direct live" ne répond pas à mes 2 questions...

  16. #16
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    Merci pour l'explication.
    Juste pour être sûr de comprendre : le slash avant la virgule, c'était juste pour l'échapper
    il n'y a pas besoin d'échapper les caractères autre que le -(tiret), et encore cf "direct live"
    et si tu n'en mets pas dans [.0-9]/g, c'est que en tout début d'une liste de caractères entre crochets, l'échappement n'est pas nécessaire ?
    pas seulement en début, sauf cas particulier du -(tiret), entre crochets il suffit de mettre les caractères que l'on veut trouver sous leur forme la plus basique.

  17. #17
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par laurentSc
    dans [.0-9]/g, c'est que en tout début d'une liste de caractères entre crochets, l'échappement n'est pas nécessaire ?
    Non, il n'y a que pour le tiret que la position est importante. En règle générale, le tiret indique une plage de caractères, par exemple 0-9 correspond à un quelconque des caractères situés entre 0 et 9 inclus (selon l'ordre de la numérotation ASCII). Sauf qu'en premier ou en dernier élément de la liste de la classe, la plage n'a plus de sens et le tiret reprend sa signification littérale, donc [-09] correspondra à tiret, 0 ou 9.

    De façon similaire, un point n'a aucun sens dans une classe. Une classe sert à préciser de chercher un caractère parmi ceux listés. Le point est habituellement le caractère joker (représente n'importe quel caractère), donc dans une classe, ça voudrait dire rechercher un caractère parmi tous les caractères possibles, ça ne sert à rien, donc il n'y a pas de caractère joker dans une classe et le point reste un point.

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

Discussions similaires

  1. [RegExp] Bug de la fonction replace ?
    Par sevine06 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 23/07/2010, 09h13
  2. [ODBC] Fonction Replace en ODBC
    Par Alexandre T dans le forum Access
    Réponses: 4
    Dernier message: 10/01/2007, 11h02
  3. Fonction replace
    Par pmboutteau dans le forum ASP
    Réponses: 11
    Dernier message: 10/06/2005, 09h42
  4. PB avec la fonction replace
    Par Techman128 dans le forum C++
    Réponses: 6
    Dernier message: 24/02/2005, 11h39
  5. Fonction replace
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 10/06/2004, 12h18

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