Avatar billede 7th Praktikant
04. februar 2003 - 06:35 Der er 9 kommentarer og
1 løsning

Store/små bogstavsfunktion

For at undgå at brugere kan skrive en tekst som for eksempel HJÆÆÆLP ønsker jeg at lave en funktion som tjekker tekststrengen igennem. Jeg har indtil nu fået mixet en lille expression sammen, men den virker ikke helt efter hensigten.

if (! empty ($_REQUEST['tekst']))
{
$tekst = $_REQUEST['tekst'];

if (ereg ("^[[:alnum:]]+$" , $tekst)) // hvis tekst kun indeholder alfa eller tal
{
if (! ereg ("[A-ZÆØÅ]{2}" , $tekst))
{
echo "<div align=\"center\">Funktionstest kører...</div>";
}

else
{
echo "<div align=\"center\">Funktionstest fejler...</div>";
}
}

else
{
echo "<div align=\"center\">Funktionstest fejler...</div>";
}
}

Brugere må nemlig gerne for eksempel skrive Jens Børge Sørensen, men det forhindres sådan som det er nu. Hvordan kan jeg lave et expression som også indkluderer dette.

Ja Ja = expression true.
JA ja = expression false.
jAA Ja = expression false.
JaAja  = expression true.
Avatar billede 7th Praktikant
04. februar 2003 - 07:50 #1
if (! ereg ("[A-ZÆØÅ]{2}" , $tekst)) // hvis andet tegn af tekststrengen ikke svarer til A-ZÆØÅ
Avatar billede sostack Nybegynder
04. februar 2003 - 07:53 #2
Prøv med:
<?
$tekst = "ReQuEsTiNg HELP is oFTen a matter of dare!";
$tekst = explode(" ", $tekst);
for($i = 0; $i < count($tekst); $i++) {
  if (ereg ("[A-ZÆØÅ]{2}" , $tekst[$i])) {
    $smaa_bogstaver = strtolower(substr($tekst[$i], 1));
    $stort_startbogstav = substr($tekst[$i], 0, 1);
    $tekst[$i] = $stort_startbogstav . $smaa_bogstaver;
    echo $tekst[$i] . " ";
  } else {
    echo $tekst[$i] . " ";
  }
}
?>

//sostack
Avatar billede 7th Praktikant
04. februar 2003 - 07:58 #3
Jeg er på vej i seng så kan ikke teste lige nu, men det ser fornuftig ud at dele tekststrengen op. $tekst indeholder iøvrigt kun navne eller emne titler, så det drejer sig kun om forholdsvis små datas.

Et lille tillægsspørgsmål. Vil det være bedst at køre expression før eller efter man putter data ind i en database ?
Avatar billede sostack Nybegynder
04. februar 2003 - 08:03 #4
Kør altid expression før du indsætter i databasen, da data så er "pænere".
Avatar billede sostack Nybegynder
04. februar 2003 - 11:00 #5
Udvidet funktionalitet:
<?
function ret_store_bogstaver($teksten){
$undtagelser = Array("HTML", "ASP", "PHP", "ODBC", "ADSL", "ISDN"); // Tilføj selv flere.
$tekst = explode(" ", $teksten);
$retur_tekst = "";

for($i = 0; $i < count($tekst); $i++) {
  if (ereg ("[A-ZÆØÅ]{2}" , $tekst[$i]) && !in_array($tekst[$i], $undtagelser)) { // Er der 2 eller flere store bogstaver efter hinanden?
   
    $smaa_bogstaver = strtolower(substr($tekst[$i], 1)); // Laver alle bogstaver undtaget start til små.
    $startbogstav = substr($tekst[$i], 0, 1); // startbogstav må gerne være Stort i alle ord.
    $tekst[$i] = $startbogstav . $smaa_bogstaver;
    $retur_tekst .= $tekst[$i] . " ";
  } else {
    $retur_tekst .= $tekst[$i] . " ";
  }
}
return trim($retur_tekst); // fjerner det sidste mellemrum og returnerer den rettede tekst.
}

echo ret_store_bogstaver("PHP kan levere et OUtput FormatteREt som HTML");
?>
//sostack
Avatar billede fangel Nybegynder
04. februar 2003 - 16:15 #6
sostack...

istedet for
$smaa_bogstaver = strtolower(substr($tekst[$i], 1)); // Laver alle bogstaver undtaget start til små.

kan du med succes bruge funktionerne ucfirst() eller ucwords()... prøv selv at se manualen...

Morten
Avatar billede 7th Praktikant
05. februar 2003 - 05:55 #7
Havde ikke mulighed for at kigge på det igår, men kigger på det idag...
Avatar billede 7th Praktikant
05. februar 2003 - 11:39 #8
Goodie, yderst fin og brugbar funktion du har fået lavet sostack :) Spørgsmålet er dog om det virkelig er nødvendig det jeg fiskede efter, om det ikke ville være meget nemmere at tjekke $streng for uppercase, og hvis ja så køre en ucfirst() funktion. Omkring mit lille tillægsspørgsmål, aner ikke hvorfor eller hvordan jeg kunne spørge om noget så dumt, men tror jeg har fået forvekslet noget da jeg var på vej i seng. Hvis man forestillede sig at man skulle køre function ret_store_bogstaver ($teksten) på alle overskrifter fra en database til et forum, ville det jo tage alt for langt tid ;) Anyway prøver lige noget, og vender så tilbage efter aftensmad og lukker.
Avatar billede 7th Praktikant
05. februar 2003 - 12:14 #9
Takker mange gange for hjælpen :)
Avatar billede sostack Nybegynder
05. februar 2003 - 12:25 #10
Grunden til jeg ikke bruger ucfirst() er, at ord der er skrevet som "oRDet" jo ikke skal rettes til "Ordet", men til "ordet". Det kan ucfirst ikke tage højde for uden en masse udenomssnak.
//sostack
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