Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460

    sostituire tutti i caratteri non appartenenti ad un certo range

    Dovrei fare un controllo su una stringa che mi elimini tutto esclusi i caratteri dalla a alla z, quindi per esempio ,.!? e gli spazi devo sostituirli con un -, come posso fare ?

    Faccio un esempio
    Prima della sostituzione: prova ciao, come va?? tutto bene bababa.
    Dopo la sostituzione: prova-ciao-come-va-tutto-bene-bababa

  2. #2
    chi cerca trova...anche se io gia la conoscevo....


    Codice PHP:

    // stringa
    $stringa "prova ciao, come va?? tutto bene bababa.";
    // caratteri da sostituire
    $occorrenze = array(" "",""?",".");
    // sostituti caratteri
    $sostituti  = array("-""""","");

    // effettuo la sostituzione
    $stringa str_replace($occorrenze$sostituti$stringa);
    // stampo
    echo $stringa
    // risultato : prova-ciao-come-va-tutto-bene-bababa
    // proprio quello che volevi.. 

  3. #3
    In questo caso si puō usare una semplice espressione regolare che lavora proprio sui range:

    Codice PHP:
    $myString='la_tua_stringa';
    // la classe [^a-z\\x20] esclude tutti i caratteri diversi 
    // da quelli contenuti nel range "a-z" + lo spazio
    $myNewString=preg_replace('/[^a-z\\x20]+/i','',$myString);
    $myNewString=str_replace(' ','-',$myNewString);


    // una versione che usa solo preg_replace
    $myNewString=preg_replace('/[^a-z]/ie','"$0"==" "?"-":""',$myString); 
    La comoditā č non doversi preoccupare di includere tutti i caratteri da escludere.
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    Non ho capito bene il replacemente, '"$0"==" "?"-":""' cosa fa

    Io ho fatto:

    Codice PHP:
    $tmp preg_replace('/[^a-z]+/i'$separatorestrtolower($stringa)); 
    in questo modo sostituisco con $separatore tutti i caratteri che non rientrano nel range a-z, e se ne trova due o piu di fila (esempio due virgole) li sostituisce con un singolo spazio..

    Dico bene ?

  5. #5
    Originariamente inviato da uMoR
    Non ho capito bene il replacemente, '"$0"==" "?"-":""' cosa fa

    Io ho fatto:

    Codice PHP:
    $tmp preg_replace('/[^a-z]+/i'$separatorestrtolower($stringa)); 
    in questo modo sostituisco con $separatore tutti i caratteri che non rientrano nel range a-z, e se ne trova due o piu di fila (esempio due virgole) li sostituisce con un singolo spazio..

    Dico bene ?
    Esatto.
    Mentre il replacement '"$0"==" "?"-":""' si riferiva alla necessitā di sostituire gli spazi con dei trattini. In pratica nell'espressione regolare attivavo il mod. di criterio e(val). In questo modo preg_replace tratta il replacement come codice php, eseguendolo, e in base a ciō che riconosce ($0 indica l'intero pattern riconosciuto) restituisce il trattino (se spazio) o stringa vuota (negli altri casi).
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    Per includere nel range di caratteri da non sostituire i numeri č giusto cosė ?

    Codice PHP:
    $tmp preg_replace('/[^a-z][^0-9]+/i'$separatorestrtolower($stringa)); 

  7. #7
    Originariamente inviato da uMoR
    Per includere nel range di caratteri da non sostituire i numeri č giusto cosė ?
    [...]
    Una classe di caratteri č racchiusa tra parentesi quadre, quindi per escludere un certo insieme di caratteri devi inserirli tutti nella stessa classe. Quella che hai scritto tu cercava un carattere "non alfabetico" seguito da uno o pių caratteri "non numerici".
    Lo strtolower lo metti per il riconoscimento? Perchč la regexp per come č impostata č case insensitive.

    Codice PHP:
    $tmp preg_replace('/[^a-z0-9]+/i'$separatorestrtolower($stringa));

    // e poi continui ad aggiungere i caratteri che vuoi preservare
    $tmp preg_replace('/[^a-z0-9āč]+/i'$separatorestrtolower($stringa));

    // eventualmente \\w (\\W il suo negato) č una classe che racchiude tutti i caratteri alfanumerici
     //(quindi anche le accentate) e l'underscore "_"
    $tmp preg_replace('/\\W+/i'$separatorestrtolower($stringa)); 
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    strtolower lo tengo perchč mi serve una stringa tutta minuscola

    Grazie per i consigli!\

  9. #9
    Ciao,
    stō cercado da oltre 2 ore ma non trovo nulla che mi possa servire...
    Questa discussione č quanto di pių simile a ciō che mi serve abbia trovato.

    Io dovrei convertire le accentate nella rispettiva lettera NON accentata... es č = e , é = e ecc...

    Come posso fare?

    Esempio

    "Note dell'autore" dovrebbe diventare "note-dell-autore"
    "Cosė č la vita" => "cosi-e-la-vita"
    ecc...

    come posso fare?

    Ciao!

  10. #10
    In pratica cerco una soluzione che sia pių elegante di uno str_replace!

    potrei fare
    Codice PHP:
    $str str_replace('č','e',$str);
    $str str_replace('é','e',$str);
    $str str_replace('ā','a',$str);
    $str str_replace('ō','o',$str);
    $str str_replace('.','',$str);
    $str str_replace(',','',$str);
    $str str_replace('!','',$str);
    $str str_replace('?','',$str); 
    ecc... ma forse sarebbe un casino, sono certo che esiste qualcosa di migliore...

    sarebbe un casino anchč cosė, se esiste un modo migliore...

    Codice PHP:
    $replace = array('.','!',';',':'); # ecc.. ecc..
    $str str_replace($replace,'',$str); 
    Perchč dovrei mettermi tutti i caratteri da eliminare... uff...
    Ciao!

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.