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

    iniziali maiuscole di una stringa.problema lettera dopo apostrofo.

    Ciao a tutti. Vi spiego subito il mio problema.

    Supponiamo che abbia una stringa del genere:

    $stringa = "SANT'ANTONIO ABATE".

    Quello che vorrei ottenere è Sant'Antonio Abate.

    Se scrivo
    $stringa = ucwords(strtolower($stringa));

    ottengo Sant'antonio Abate perchè la lettera dopo l'apostrofo non viene vista come una parola distinta. Suppongo che ci voglia un'espressione regolare ma non le so usare.
    Mi potete aiutare. Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Potrebbe essere la volta buona per incominciare ad usarle... oppure potresti ingegnarti con gli strumenti che hai già a disposizione: fai il replace dell'apostrofo con apostrofo e spazio, e applichi ucwords, dopodiché fai la sostituzione inversa.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Vorrei chiederti: ma le stringhe con cui hai a ke fare contengono solo nomi, oppure si tratta di frasi generiche per cui l'apostrofo potrebbe essere usato ad es. in una frase del genere <<prendi un po' di pane>>?

    Nel primo caso potresti fare:

    $cerca = explode("'", $stringa);

    if (sizeof($cerca) == 0) $stringa = ucwords(strtolower($stringa));
    else
    {
    foreach($cerca as $elem) $stringa .= ucwords(strtolower($elem)) . "'";

    //Occorre ora togliere l'ultimo apostrofo
    $l_stringa = strlen($stringa);
    $stringa = substr($stringa, 0, $l_stringa-1);
    }

    Ciao.

  4. #4
    Ho seguito il tuo consiglio

    codice:
    $nome = "SANT'ANTONIO ABATE";
    $nome = str_replace("'","' ",$nome);
    $nome = ucwords(strtolower($nome));
    $nome = str_replace("' ","'",$nome);
    echo $nome;
    e funziona ma mi sembra una schifezza di sistema.
    Grazie.

  5. #5
    Originariamente inviato da gianf_tarantino
    Vorrei chiederti: ma le stringhe con cui hai a ke fare contengono solo nomi, oppure si tratta di frasi generiche per cui l'apostrofo potrebbe essere usato ad es. in una frase del genere <<prendi un po' di pane>>?
    Si tratta di un campo di un form in cui vanno inseriti nomi di paesi e li vorrei inserire nel mio database nel formato che ho scritto prima.

  6. #6
    A questo punto la soluzione proposta da Andrea1979 mi sembra veloce ed efficace!

  7. #7
    Ma pensavo che le espressioni regolari servissero proprio per queste cose. Se nessun è in grado di dirmi come scriverla mi accontenterò di questa soluzione.

  8. #8
    Ho cercato di rispondere ieri, ma hanno fatto manutenzione al forum.
    Comunque, le espressioni regolari vengono principalmente usati per trovare sottostringhe all'interno di stringhe. Sia explode, che str_replace ne sono un esempio.
    Al di là di ciò, la soluzione che ti ha proposto Andrea1979 è, dal punto di vista computazionale, sicuramente più efficiente della mia ed è funzionante. Cosa vuoi di +?

    Per ulteriori approfondimenti sulle espressioni regolari potresti dare un'occhiata a questo indirizzo http://www.mrwebmaster.it/tutorial/php/tutorial513.htm


    Ciao.

  9. #9
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    Originariamente inviato da andrea_kobe
    Ma pensavo che le espressioni regolari servissero proprio per queste cose. Se nessun è in grado di dirmi come scriverla mi accontenterò di questa soluzione.
    Guarda se la soluzione proposta in questo thread può tornarti utile.

  10. #10
    Originariamente inviato da neida
    Guarda se la soluzione proposta in questo thread può tornarti utile.
    Grazie neida, in effetti il mio problema è proprio quello del thread che mi hai indicato.
    Ho usato la tua espressione regolare però ho notato che se la applico su una stringa tutta maiuscola non succede niente, se prima di usarla faccio un strtolower risultano minuscole tutte le iniziali tranne la lettera successiva all'apostrofo mentre funziona bene se prima di usarla faccio ucwords(strtolower(miastringa).

    codice:
    $stringa = "SANT'ANTONIO ABATE";
    echo preg_replace("/(\w*)'(\w+)/ie", "'\\1\\''.ucwords('\\2')", $stringa);
    // stampa SANT'ANTONIO ABATE
    
    
    echo '
    ';
    $stringa2 = "SANT'ANTONIO ABATE";
    $stringa2 = strtolower($stringa2);
    echo preg_replace("/(\w*)'(\w+)/ie", "'\\1\\''.ucwords('\\2')", $stringa2);
    // stampa sant'Antonio abate
    
    
    echo '
    ';
    $stringa3 = "SANT'ANTONIO ABATE";
    $stringa3 = ucwords(strtolower($stringa3));
    echo preg_replace("/(\w*)'(\w+)/ie", "'\\1\\''.ucwords('\\2')", $stringa3);
    // stampa correttamente Sant'Antonio Abate
    mi sei stato di grandissimo aiuto ma mi chiedevo se fosse possibile nel caso di stringa3 fare tutto all'interno dell'espressione regolare.

    Grazie ancora.

    P.S. La tua espressione regolare l'ho quotata dal tuo thread perchè ho visto che veniva eliminato un backslash dal codice. Anche in questi esempi che ho scritto manca sempre un backslash prima di ucwords ma nel codice se lo quoti c'è.

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.