Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    espressione regolare per prezzi

    mi aiutate a fare un espressione regolare per eliminare i prezzi da un stringa?

    i prezzi sono nel formato € 123,00

  2. #2
    codice:
    /(€[ ]?[\d\.]+(=?,\d+)?)/
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    per mia curiosità, cosa cambia tra quella di Santino e quella che scrivo sotto?
    codice:
    /(€\s[\d\.,]+)/

  4. #4
    Quote Originariamente inviata da clasku Visualizza il messaggio
    per mia curiosità, cosa cambia tra quella di Santino e quella che scrivo sotto?
    codice:
    /(€\s[\d\.,]+)/
    Che ha meno roba inutile, come la character class per uno spazio letterale e il lookahead
    Pero' \s e' meno preciso di " ", se ci si aspetta uno spazio conviene richiedere uno spazio, non un qualunque carattere "white space" (che comprende anche tab ad esempio).

    Se poi il formato e' sicuro, e' meglio essere il piu' precisi possibile per evitare di matchare piu' del necessario, quindi se ci sono 2 numeri decimali meglio \d\d che \d+.

    Inoltre le parentesi che racchiudono tutto il pattern sono inutili e, all'iterno di una character class, il punto non necessita di escape.

    In breve
    codice:
    /€ \d+,\d\d/

  5. #5
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    capito, grazie

  6. #6
    Quote Originariamente inviata da k.b Visualizza il messaggio
    Che ha meno roba inutile, come la character class per uno spazio letterale e il lookahead
    io non scrivo roba inutile, se voi non capite le mie ragioni è perchè io ragiono ad un livello troppo alto per voi

    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    cmq, questa espressione:

    codice:
    (€\s?[\d\.]+(=?,\d+)?)
    fa il match corretto di:
    codice:
    il prezzo è € 127,00
    il prezzo è €127,00. vero?
    il prezzo è €127,00, vero?
    mentre

    codice:
    (€\s[\d\.,]+)
    solo del primo caso.


    EDIT: cmq non ci capisco molto di regexp, diciamo che sopravvivo con quel poco che conosco.
    Ultima modifica di Santino83_02; 10-07-2015 a 15:17
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    cmq, questa espressione:

    codice:
    (€\s?[\d\.]+(=?,\d+)?)
    fa il match corretto di:
    codice:
    il prezzo è € 127,00
    il prezzo è €127,00. vero?
    il prezzo è €127,00, vero?
    mentre

    codice:
    (€\s[\d\.,]+)
    solo del primo caso.


    EDIT: cmq non ci capisco molto di regexp, diciamo che sopravvivo con quel poco che conosco.
    Si, e' per quello che e' MOLTO importante specificare con precisione cosa si vuole cercare. Se la domanda presenta "€ 127,00" come esempio, l'unica deduzione automatica e' che si voglia:
    1. il carattere €
    2. uno spazio
    3. una sequenza di numeri
    4. una virgola
    5. una sequenza di DUE numeri

    (e gia' il punto 3 e' comunque una generalizzazione per deduzione, perche' altrimenti si potrebbero anche cercare TRE numeri e non una sequenza indefinita)

    Se lo spazio e' opzionale, o se puo' essere presente il punto separatore delle migliaia, allora va precisato. Scrivere un pattern piu' generico del necessario e' inutile e spesso dannoso.

    La vera difficolta' di utilizzare bene le regular expressions non e' la sintassi, ma imparare a DESCRIVERE CON ESTREMA PRECISIONE quello che si sta cercando.

  9. #9
    K.b. ovviamente scherzavo prima. Per questo avevo fatto una espressione più lunga (sbagliat, ndr, di seguito quella corretta) perchè non sapendo che cosa volesse veramente andare a matchare il richiedente, l'ho resa un pò più flessibile nel match.

    ad esempio una versione rivista è la seguente (da prendere con il beneficio del dubbio):

    codice:
    (€\s?\d+(<?\.\d+)*(=?,\d+)?)
    che fa il match di:

    codice:
    il prezzo è € 127
    il prezzo è € 127. vero?
    il prezzo è € 127, vero?
    il prezzo è € 127,00
    il prezzo è €127,00. vero?
    il prezzo è €127,00, vero?
    il prezzo è € 1.127,00
    il prezzo è € 1.127,00. vero?
    il prezzo è € 1.127,00, vero?
    il prezzo è € 1.127
    il prezzo è € 1.127. vero?
    il prezzo è € 1.127, vero?
    il prezzo è € 1.127.345
    il prezzo è € 1.127.345. vero?
    il prezzo è € 1.127.345, vero?
    il prezzo è € 1.127.345,00
    il prezzo è € 1.127.345,00. vero?
    il prezzo è € 1.127.345,00, vero?
    poi bejelit ci farà sapere che che cosa voleva fare il match o meno
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  10. #10
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    K.b. ovviamente scherzavo prima.
    Sisi era chiaro

    Volevo solo sottolineare che le regular expressions sono per il 10% sintassi e per il 90% capacita' di descrivere esattamente e rigorosamente cosa stai cercando.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.