19. maj 2006 - 10:29
Der er
24 kommentarer og 2 løsninger
udvælg 3 første ord i sætning
Sådan ser det ud: $titel = "Sodanvand til de bedste priser i hele danmark"; jeg skal bruge de jeg første ord $ny = "sodavand-til-de"; så vil jeg gerne have det ud, altså kun de 3 første ord, alt skal være med lilleskrift og må kun indeholde tegn fra A-Z hvordan gør jeg ?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
preg_match("/([a-z]+ ){2}[a-z]/", strtolower($titel), $m); $ny = strtr($m[0], ' ', '-');
Aldeles utestet, og allerede med fejl ;) preg_match('/([a-z]+ ){2}[a-z]+/i', strtolower($titel), $m); $ny = strtr($m[0], ' ', '-');
... ps: Det kan helt sikkert også klares uden reg.exp., men det kræver lidt mere kode, da man først lige skal finde 3. space. Desuden kan det sikkert også laves i én preg_replace, men det er jeg slet ikke hård nok til. - Jens
<?php $titel = "Sodanvand til de bedste priser i hele danmark"; $ny = explode(" ",$titel); $nystreng = $ny[0]." ".$ny[1]." ".$ny[2]; if (!preg_match("/[a-zA-Z\s]{".strlen($nystreng)."}/",$nystreng)) { echo "Valideringsfejl"; } else { echo strtolower($nystreng); } ?> Men skal der ikke laves noget hvis $titel indeholder noget med æøå?
jo så skal æøå bare laves om til ae, oe, aa,
Okay, det kunne jeg bare ikke læse ud af dit oprindelige spørgsmål. <?php $titel = "Sodanvand til de bedste priser i hele danmark"; $ny = explode(" ",$titel); $nystreng = $ny[0]." ".$ny[1]." ".$ny[2]; $danishvowels = array("æ","ø","å"); $danishvowelscompat = array("ae","oe","aa"); if (!preg_match("/[a-zA-Z\s]{".strlen($nystreng)."}/",$nystreng)) { $nyfinal = str_replace($danishvowels,$danishvowelscompat,strtolower($nystreng)); } else { $nyfinal = strtolower($nystreng); } echo $nyfinal; ?>
det virker ikke jeg får kun de første ord frem
preg_match('/([a-zæøåÆØÅ]+ ){2}[a-zæøåÆØÅ]+/i', strtolower($titel), $m); $ny = str_replace(array(' ', 'æ', 'ø', 'å'), array('-', 'ae', 'oe', 'aa'), $m[0]);
De første ord, eller det første ord? Du beder jo netop om kun at få de første 3 ord ud.
jensgram dit virker fint, MEN er titlen fx: Panasonic TH-42PV60 Testvinder i Video-magazin.de så trækker den dette ud: testvinder-i-video terrak ja kun det første ord
Jeg ved ikke hvorfor det ikke virker ved dig, men nu har du jo skrevet at de tre ord kun må indeholde a-z og æ ø å skal konvertes til ae oe aa. Hvad skal der så ske med tal?
de skal bare vises Panasonic TH-42PV60 Testvinder i Video-magazin.de skulle gerne blive til panasonic-th-42pv60-testvinder
Prøv lige at skriv hvad du får ud af dette script: <?php $titel = "Panasonic TH-42PV60 Testvinder i Video-magazin.de"; $ny = explode(" ",$titel); $nystreng = $ny[0]."-".$ny[1]."-".$ny[2]; die($nystreng); ?>
Panasonic-TH-42PV60-Testvinder
Det her virker perfekt hos mig.. hvilken php version har du? <?php $titel = "Pansonic TH-42PV60 Testvinder i Video-magazin.de"; $ny = explode(" ",$titel); $nystreng = $ny[0]."-".$ny[1]."-".$ny[2]; $danishvowels = array("æ","ø","å"); $danishvowelscompat = array("ae","oe","aa"); if (!preg_match("/[a-zA-Z1-9\s]{".strlen($nystreng)."}/",$nystreng)) { $nyfinal = str_replace($danishvowels,$danishvowelscompat,strtolower($nystreng)); } else { $nyfinal = strtolower($nystreng); } echo $nyfinal; ?>
jamen hvorfor ikke bare bruge: $titel = "Panasonic TH-42PV60 Testvinder i Video-magazin.de"; $ny = explode(" ",$titel); $nystreng = $ny[0]."-".$ny[1]."-".$ny[2]; kan man så ikke lave alle bogstaver små ?
$titel = "Panasonic TH-42PV60 Testvinder i Video-magazin.de"; $ny = explode(" ",$titel); $nystreng = $ny[0]."-".$ny[1]."-".$ny[2]; $nyfinal = strtolower($nystreng); <- det virker da fint, og så laver jeg en replace der fjerne æ ø å, og så kører det da ?
Du startede med at sige at teksten skal følge et bestemt mønster, uden at sige hvad der skulle ske hvis det ikke følgte dette mønster. Så jeg gik ud fra at du søgte noget der fandt ud af om teksten følgte dette mønster, eller ej. Men hvis du bare skal erstatte forskellige ting, så er det vel fint som du foreslår, hvis bare du er sikker på at det er det eneste :-) Så det vil sige: <?php $titel = "Pansonic TH-42PV60 Testvinder i Video-magazin.de"; $ny = explode(" ",$titel); $nystreng = $ny[0]."-".$ny[1]."-".$ny[2]; $danishvowels = array("æ","ø","å"); $danishvowelscompat = array("ae","oe","aa"); $nyfinal = str_replace($danishvowels,$danishvowelscompat,strtolower($nystreng)); echo $nyfinal; ?> Eller virker det ikke?
jo det er som det skal være, smid svar :)
Jå ok - det var jo ikke lige det jeg læste ud af "må kun indeholde tegn fra A-Z" ;) preg_match('/([^ ]+ ){2}[^ ]+/i', strtolower($titel), $m); $ny = str_replace(array(' ', 'æ', 'ø', 'å'), array('-', 'ae', 'oe', 'aa'), $m[0]);
Hov: preg_match('/^([^ ]+ ){2}[^ ]+/i', strtolower($titel), $m); $ny = str_replace(array(' ', 'æ', 'ø', 'å'), array('-', 'ae', 'oe', 'aa'), $m[0]);
Du burde dog også give point til jensgram, da han ligeledes har brugt tid på at prøve at hjælpe dig.
Ja jeg takker jer begge for jeres tid, og svar :)
Vi tilbyder markedets bedste kurser inden for webudvikling