Avatar billede learner Praktikant
04. juli 2012 - 12:19 Der er 22 kommentarer og
1 løsning

PRODUKTNAV HER ændres til Produktnavn hvis alle bogstaver er STORE

Hej jeg kender godt strtolower, men jeg kunne godt tænke mig at den kun ændrer produktnavnet hvis alle bogstaver er STORE.

Forestiller mig  noget i stil med
$s = 'PRODUKTNAVN VARIANT TRE 500 gr';
$s = explode(' ', $s);
$ny = array();
foreach($s as $y){
  if(det_er_kun_bogstaver_og_alle_tegn_er_store($y)){
    $y = ucwords($y);
  }
  $ny[] = $y;
}
echo implode(' ', $ny);

Men findes der smartere og bedre måder at rydde op i sådan noget????

På forhånd tak

Michael
Avatar billede majbom Novice
04. juli 2012 - 12:26 #1
Avatar billede learner Praktikant
04. juli 2012 - 17:25 #2
ja tak for det

Man kan ikke gøre det det ved hjælp af regular expressions, vel?
Avatar billede olebole Juniormester
04. juli 2012 - 19:34 #3
<ole>

Udgangspunktet er ikke kønt dansk, men absolut mere korrekt dansk. Der er ikke noget i vejen for at skrive en hel tekst i versaler. Bruger du derimod både store og små bogstaver, skal du overholde regler for dansk grammatik - og her finder du ikke noget, der retfærdiggør, at hvert ord skrives med stort.

På engelsk kan du heller ikke - som mange ellers tror - skrive overskrifter med bar store begyndelsesbogstaver ... men næsten. Her skal forholds- og bindeord stadig staves med lille.

Er du helt sikker på, du vil skifte noget uskønt ud med noget direkte forkert?  =)

/mvh
</bole>
Avatar billede learner Praktikant
04. juli 2012 - 21:09 #4
Hej Ole

jeg har en liste med tusindvis af ord, så ja jeg er sikker på det skal gøres af php :o)

men jeg påtænker flg:

kun ændre hvis ordet er:
- mere end 3 tegn
- alle er STORE bogstaver
- kun benytte ucwords() på det alleførste ord og ellers benytte strtolower()
Avatar billede olebole Juniormester
04. juli 2012 - 21:25 #5
Ja, naturligvis vil du gøre det med PHP. Det var ikke det, jeg spurgte om  =)

$s = preg_replace_callback('/\b[A-Z]{3,}\b/', create_function('$matches', 'return ucfirst(strtolower($matches[0]));'), $s);
echo $s
Avatar billede olebole Juniormester
04. juli 2012 - 21:27 #6
Njarh ... den opfylder spørgsmålet. Denne her burde opfylde #4.3:

$s = preg_replace_callback('/\b[A-Z]{3,}\b/', create_function('$matches', 'return strtolower($matches[0]);'), $s);
echo ucfirst($s);
Avatar billede learner Praktikant
05. juli 2012 - 13:28 #7
Hej

Mange tak for begge - det løste min udfordring med det vons

:o)
Avatar billede learner Praktikant
05. juli 2012 - 13:34 #8
Hov kan den også håndtere æøåÆØÅüÜ osv ?
Avatar billede olebole Juniormester
05. juli 2012 - 13:54 #9
'/\b[A-ZÆØÅÜ]{3,}\b/'
Avatar billede learner Praktikant
06. juli 2012 - 10:33 #10
Ja nemli ja, mange tak for hjælpen endnu en gang Ole :o)
Avatar billede olebole Juniormester
06. juli 2012 - 15:50 #11
Selvtak. Hvis du er tilfreds, bør tråden nok lukkes. Jeg samler som bekendt ikke, men splazz har også deltaget i løsningen, såmit forslag er, at han får pointene  =)
Avatar billede learner Praktikant
06. juli 2012 - 16:30 #12
Helt i orden, jeg giver gerne point til alle der hjælper :o)
Rigtig god weekend
Avatar billede olebole Juniormester
06. juli 2012 - 16:38 #13
Rolig nu! Kender jeg dig ret, er det ikke usandsynligt, vi mødes i en tråd, inden weekenden er overstået  *D

Altid en fornøjelse ... og i lige måde  =)
Avatar billede majbom Novice
06. juli 2012 - 18:07 #14
jamen så smider jeg da et svar :)
Avatar billede learner Praktikant
07. juli 2012 - 01:41 #15
hELT I ORDEN :O)
Avatar billede olebole Juniormester
07. juli 2012 - 02:31 #16
Hmmm ... måske, du skulle smide #15 igennem scriptet - bortset fra, at 'hELT' ender i kun versaler  *D
Avatar billede majbom Novice
07. juli 2012 - 08:30 #17
tfp :)
Avatar billede learner Praktikant
07. juli 2012 - 10:40 #18
LOL :)
Avatar billede learner Praktikant
09. juli 2012 - 14:43 #19
hmm
den driller lidt...

echo preg_replace_callback('/\b[A-ZØÆÅÜÄÖ]{2,}\b/', create_function('$matches', 'return "match";'), 'SØNDERSØ');

bliver til søndersØ her ved mig :o)

Kan du evt sige mig hvad jeg skal gøre?
Avatar billede olebole Juniormester
09. juli 2012 - 16:25 #20
Ih Guder, hvor er jeg dog ved at være træt af det her l*rtesprog! Desværre var PHP ikke særlig gennemtænkt/færdigt, da det udkom. Med tiden er det på mange områder kommet til at bestå af en dårlig kode, dækket af en samling halvdårlige lapper - omend det laaaaangsomt bliver bedre  :o|

Det kniber voldsomt med Unicode understøttelse menge steder i PHP - herunder PCRE-funktionerne (Perl RegExp) og strtolower. Du er nødt til at bruge u-modifier'en og mb_strtolower:

$s = "KÆLLIGEÅLEN ÆDER ØLLEBRØD MED RÅ ÆG";
$s = preg_replace_callback('/\b[A-ZØÆÅÜÄÖ]{2,}\b/u',
        create_function('$matches', 'return mb_strtolower($matches[0], "UTF-8");'), $s);

echo ucfirst($s);
Avatar billede olebole Juniormester
09. juli 2012 - 20:03 #21
Hmmm ... nu har jeg taget mig tid til at teste lidt mere, fordi jeg fik en lumlsk mistanke om, at ucfirst heller ikke understøtter utf-8. Ganske korrekt! Det vil gå galt med strengen "ÆLLIGEÅLEN ÆDER ØLLEBRØD MED RÅ ÆG"  :o|

Dette må være løsningen, som understøtter utf-8:

function myUcFirst($s) {
    $s = preg_replace_callback('/\b[A-ZØÆÅÜÄÖ]{2,}\b/u',
            create_function('$matches', 'return mb_strtolower($matches[0], "UTF-8");'), $s);
   
    return mb_strtoupper(mb_substr($s, 0, 1, 'UTF-8'), 'UTF-8').mb_substr($s, 1, 1e10, 'UTF-8');
}

$s = 'ÆLLIGEÅLEN ÆDER ØLLEBRØD MED RÅ ÆG';
echo myUcFirst($s);
Avatar billede learner Praktikant
10. juli 2012 - 08:33 #22
Hey der var den jo :o)
Ja det duer

Tusind tak :o)
Avatar billede olebole Juniormester
10. juli 2012 - 15:24 #23
Selvtak, det er da også en besværlig omgang med den ringe Unicode understøttelse. Nå pyt, bare Freud ikke kommer forbi og læser mine teststrenge. Dem ville han sikkert kunne få et og andet ud af  *D
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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