[php] Hoofdletter na . ? !

Pagina: 1
Acties:

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 23:05
Het onderstaand script heb ik gevonden op PHP.net. Maar na een spatie zet hij ook een hoofdletter. Maar dat mag niet. Alleen achter een .?!

Dus toen dacht ik verbouw deze regel.
preg_match_all("/(\w+[. ?!])+/U", $text, $words);

veranderd in
preg_match_all("/(\w+[.?!])+/U", $text, $words);

Maar nu worden niet alle woorden weer gegeven.
Weet iemand hoe ik ervoor zorg dat na een spatie geen hoofdletter komt?
PHP:
1
2
3
4
5
6
7
8
9
<?
$text = "What?No delimiters,shit happens here.this solves all problems.";
preg_match_all("/(\w+[. ?!])+/U", $text, $words);
preg_match("/(\w+)$/", $text, $lastword);
$words[0][] = $lastword[0];
foreach($words[0] as $part) $uwords[] = ucfirst($part);
$text = implode(" ", $uwords);
echo $text;
?>

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Simpel toch:
Gewoon de spatie uit de regex verwijderen.

--edit--
Hmmz, dat klopt dus niet helemaal... |:(
...argh, beter lezen.

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Vanwege mijn blundertje van daarnet heb ik dit maar in elkaar geprutst... veel succes ermee... :)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
    $text = "what?No delimiters,shit happens here.this solves all problems.";
    
    // Pleur er spaties tussen:
    preg_match_all( '/(\w+[., ?!])+/U', $text, $words);
    foreach( $words[0] as $part) {
        $awords[] = trim( $part);
    }
    
    // Zorg voor hoofdletters op de juiste plaatsen:
    foreach( $awords as $key ) {
        if ( $uc_next_word )                            // Moet dit woord gekapitaliseerd worden?
            $bwords[] = ucfirst( $key);                 // Doe dat dan en pleur het in de array.
        else
            $bwords[] = $key;
        if ( preg_match( '/\w+[\.|?|!]/', $key) )       // Staat er een [.], [?] of [!] aan het einde van dit woord?
            $uc_next_word = true;                       // Zorg er dan voor dat het volgende woord gekapitaliseerd wordt.
        else
            $uc_next_word = false;
    }
    $text = ucfirst( implode( ' ', $bwords));           // Prop alle woorden bij elkaar en zorg ervoor dat de eerst letter 
                                                        // van de zin zekerste weten gekapitaliseerd is.
    echo $text;
?>

  • Vulpecula
  • Registratie: April 2001
  • Laatst online: 23:05
Ik heb eens ff gezocht bij phpbuilder.com en daar heb ik dit gevonden.
PHP:
1
2
3
<?
$string=preg_replace("/([.?!]+\s+)(.)/se","'\\1'.strtoupper('\\2')", $string);
?>

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 05-09 18:58
Ziet er kleiner uit dan dat van mij... :'( :)