Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: modifica stringhe

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    17

    modifica stringhe

    Salve questo è il mio primo post

    ho un domanda,
    devo modificare dei campi di un database con php i campi sono di diverso genere,del tipo:

    solo numerici:
    000002

    e questi li modifico cosi:BOLLA-000002-2008 (BOLLA-campo-2008)

    alfanumerici con data:

    ADAB00003/02:

    e lo devo far diventare:ADAB-00003-2002 (parteletterale-partenumerica-anno)

    alfanumerici:
    ADAB00003
    che diventano ADAB-00003-2008 (parteletterale-partenumerica-2008)

    le parti letterali e numeriche possono cambiare di estensione,ma le date sono sempre di due cifre io ho rispolto una parte del problema con una funzione ma è troppo rigida e mi valuta solo alcuni tipi,vorrei qualche consiglio per fare una funzione più raffinata che vada bene per qualunque evenienza.

    grazie in anticipo

  2. #2
    Per scrivere del codice che vada bene in generale, bisogna sapere esattamente in quanti (e quali) modi possono apparire quei dati. Se riesci a descrivere il formato anziche' elencarne le possibili variazioni, hai gia' fatto meta' del lavoro.

    Per esempio da quello che hai scritto si puo' supporre che tu abbia:
    - la sequenza "ADAB" opzionale
    - 6 caratteri numerici
    - uno slash + due caratteri numerici opzionali

    e' corretto? Ci sono altre possibili variazioni?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    17
    le 3 possibili variazioni sono quelle che ho descritto solo che al posto di adap ci può essere carlo
    oppure rif

  4. #4
    Questa versione e' un po' piu' generale perche':
    - accetta ogni carattere alfabetico prima della sequenza di 6 cifre
    - accetta l'anno dopo le 6 cifre anche se non ci sono caratteri alfabetici prima (tipo "000003/03"), non sapevo se era necessario
    - considera in maniera estremamente semplicistica solo gli anni dal 2000 in poi (non e' un problema sistemare quello se necessario)

    Codice PHP:
    <?php
    $in 
    'ADAB000002/02';

    $out "";
    if (
    preg_match("#(\\w*)(\\d{6})(?:/(\\d\\d))?#"$in$matches)) {
        if (
    $matches[1]) {
            
    $out $matches[1] . "-";
        } else {
            
    $out "BOLLA-";
        }
        
    $out .= $matches[2] . "-";
        if (
    $matches[3]) {
            
    $out .= "20" $matches[3];
        } else {
            
    $out .= date("Y"time());
        }
    }

    echo 
    $out;
    ?>

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    preg_match_all("#([a-z]+)(\d+)\/(\d{2})#i",$str,$out);
    echo '<pre>';
    print_r($out);

  6. #6
    Nicola, la tua regex funziona solo con la stringa "completa", se sono assenti l'anno e/o i caratteri alfabetici iniziali fallisce.

    P.S. editato il mio post sopra perche' mi ero scordato di mettere i doppi backslash (ma puo' un forum con i tag PHP interpretare i backslash nel codice )

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da k.b
    Nicola, la tua regex funziona solo con la stringa "completa", se sono assenti l'anno e/o i caratteri alfabetici iniziali fallisce.
    Hai ragione, non avevo fatto caso a quelle eventualità.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    17
    grazie kb fuzniona alla grande mi spigherestisolo questa parte che non capisco

    (?:/(\d\d))?

    sopratutto non capisco ?:/

  9. #9
    Si chiamano "non capturing parenthesis", e' la sintassi che si usa per poter utilizzare le parentesi solo come operatore di raggruppamento senza che venga memorizzato il loro contenuto dopo il match (cioe' nelle variabili $1, $2, ... in Perl e nell'array popolato dalla funzione preg_match in PHP).

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    17
    ti ringrazio la funzione va alla grande mica mi sai dire dove posso prendere informazioni dettaggliate sulle espressioni regolari.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.