Avatar billede andersdp Nybegynder
07. juli 2006 - 10:45 Der er 11 kommentarer

stort bogstav efter punktum

Har søgt lidt rundt, men kan ikke finde en metode til at formattere en tekst så den bliver læsevenlig.

Altså stort begyndelses bogstav, og stort bogstav efter punktum - resten lowercase.

Det første er nemt:
$text = ucfirst(strtolower($txt));
Men derefter skal man formentlig ud i noget reg exp, og det er ikke min stærke side.

Nogle der har en løsning?
Avatar billede nielle Nybegynder
07. juli 2006 - 10:49 #1
Prøv at kigge på ucfirst():

http://dk.php.net/manual/en/function.ucfirst.php


Har du iøvrigt tænkt på at du vil få problemer med navne - f.eks. hvis folk skriver at Nielle sagde det og det - midt i en tekst?
Avatar billede nielle Nybegynder
07. juli 2006 - 10:50 #2
Undskylder ... varmen er åbentbart gået mig til hovedet. Du nævner jo selv ucfirst().
Avatar billede nielle Nybegynder
07. juli 2006 - 10:51 #3
Du behøver dog ikke at kalde strtolower() før at du kalder ucfirst().
Avatar billede andersdp Nybegynder
07. juli 2006 - 10:56 #4
Mht. navne og lignende, er det ikke et problem til denne løsning (der er lidt speciel). Det vigtigste er læsevenligheden.

Du har ret, jeg undlader dobbeltkonfekten :)
Avatar billede iss Novice
07. juli 2006 - 11:03 #5
Det nærmeste må vel være:
$txt = explode(". ", $txt);
foreach($txt as $string) $txt2[] = ucfirst(strtolower($string));
$txt = implode(". ", $txt2);

Men har du ikke et eksempel på noget tekst?
Avatar billede andersdp Nybegynder
07. juli 2006 - 11:41 #6
Ja, det er derhenad.

Eksempel:
---------------------------------
Lorem ipsum Dolor sit amet, consectetur adipiSicing elit, sed do EIUSMOD tempor incididunt ut labore et dolore magna aliqua.

ut enim ad Minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea COMMODO consequat.
---------------------------------

Reglerne må være:
Første tegn i string skal være stort (ucfirst)
alt efter ". " skal være stort
første bogstav efter linieskift skal være stort (\r\n)
Avatar billede andersdp Nybegynder
07. juli 2006 - 12:28 #7
Har løst det på denne måde:
-------------------------
    $text = ucfirst(strtolower($txt));
   
    $t1 = explode(". ", $text);
    foreach($t1 as $string1) $txt1[] = ucfirst($string1);
    $t1final = implode(". ", $txt1);
   
    $t2 = explode("\r\n", $t1final);
    foreach($t2 as $string2) $txt2[] = ucfirst($string2);
    $t2final = implode("\r\n", $txt2);

    $t3 = explode("? ", $t2final);
    foreach($t3 as $string3) $txt3[] = ucfirst($string3);
    $t3final = implode("? ", $txt3);
--------------------

iss, du må gerne smide et svar for hjælpen.
Avatar billede nielle Nybegynder
07. juli 2006 - 14:32 #8
Husk nu at fjerne kaldet til strtolower() :^)

Iøvrigt er der ikke brug for at køre en eksplicit ucfirst på strengen til at starte med. Den bliver jo også håndteret i løkken lige nedenunder.

Du kan altså nøjes med:

    $t1 = explode(". ", $text);
    foreach($t1 as $string1) $txt1[] = ucfirst($string1);
    $t1final = implode(". ", $txt1);
   
    $t2 = explode("\r\n", $t1final);
    foreach($t2 as $string2) $txt2[] = ucfirst($string2);
    $t2final = implode("\r\n", $txt2);

    $t3 = explode("? ", $t2final);
    foreach($t3 as $string3) $txt3[] = ucfirst($string3);
    $t3final = implode("? ", $txt3);
Avatar billede andersdp Nybegynder
07. juli 2006 - 14:43 #9
Jep, det gik lidt stærkt :)
Avatar billede gizmo-gizmo Nybegynder
07. juli 2006 - 17:03 #10
Hvad med:

$txt = "blah. something? right on";
echo preg_replace_callback("/(\. |\? |\n\r|^)([a-zæøå]+)\b/", create_function('$regs','return $regs[1] . ucfirst($regs[2]);'), $txt);

:-)
Lidt alternativt, men det burde virke fint.
Avatar billede gizmo-gizmo Nybegynder
07. juli 2006 - 17:08 #11
ups... fjern lige det \b i regex'en.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester