Avatar billede ra__mus Nybegynder
17. august 2005 - 13:20 Der er 22 kommentarer og
1 løsning

længde af ord i streng

Hej.
Er det muligt og hvordan finder jeg det ord der indeholder flest tegn i en tekst streng  ??
Avatar billede medions Nybegynder
17. august 2005 - 13:24 #1
Laver en Explode() på hele din tekststreng på mellemrum (" "), så får du dem ned i et Array, herefter begynder du dig så frem i en løkke med:

arrOrd[i].length

Og så spørger du selvf. om hvilke ord der er størst, dem der er størst gemmer du så i en variabel der fx. hedder intBiggest, og så har du den så til sidst..

//>Rune
Avatar billede nielle Nybegynder
17. august 2005 - 13:24 #2
$dinTekst = "Er det muligt og hvordan finder jeg det ord der indeholder flest tegn i en tekst streng"

$alleOrd = explode(" ", $tekst);
$maxLen = -1;
foreach ($alleOrd as $ord)
{
    if (strlen($ord) > $maxLen)
    {
        $maxLen = strlen($ord);
    }
}
echo strlen($maxLen);
Avatar billede ra__mus Nybegynder
17. august 2005 - 13:43 #3
ok jeg har i mellemtiden lige fundet noget javasript som herunder :

<script type="text/JavaScript">
var max = 40; // max længde per ord
var tekst = document.forms[0].brev.value; //kontrollere kommentaren
var arrTekst; // arrayen som skal bruges
var fejl; // fejl-kontrol
var i; // tæller

arrTekst = tekst.split(" ") // del teksten ved mellemrum
for (i = 0; i < arrTekst.length; i++) { // så længe at tælleren i, er mindre en længden på arrayen, forhøj i med 1
  if (arrTekst[i].length > max) { fejl = 'ja'; } // hvis et det nuværende ord er længere end max, sæt fejl til "ja"
 
}

if (fejl == 'ja') alert('teksten indeholder et udgyldigt ord!'); // hvis fejl, hvis fejl er sat til "ja"
</script>

Ved ikke lige hvor jeg skal indsætte det.. Skal det står i selve formen eller udenfor eller på den side som formen sender en til ????
Avatar billede ra__mus Nybegynder
17. august 2005 - 13:44 #4
er taget fra dette spm : http://eksperten.dk/spm/445817
Avatar billede nielle Nybegynder
17. august 2005 - 13:55 #5
Clientside validering kan aldrig være et alternatib til serverside validering, aller højest et suplement. Clientside validering kan nemlig meget nemt omgås.

Din JavaScript kode skal tilrettes lidt hvis det skal bruges:

<script type="text/JavaScript">
function validateBrev()
{
    var max = 40; // max længde per ord
    var tekst = document.forms[0].brev.value; //kontrollere kommentaren
    var arrTekst; // arrayen som skal bruges
    var fejl; // fejl-kontrol
    var i; // tæller

    arrTekst = tekst.split(" ") // del teksten ved mellemrum
    for (i = 0; i < arrTekst.length; i++)
    { // så længe at tælleren i, er mindre en længden på arrayen, forhøj i med 1
        if (arrTekst[i].length > max)
        {
            fejl = 'ja';
        } // hvis et det nuværende ord er længere end max, sæt fejl til "ja"
    }

    if (fejl == 'ja')
    {
        alert('teksten indeholder et udgyldigt ord!'); // hvis fejl, hvis fejl er sat til "ja"
        return false;
    }
    else
    {
        return true;
    }
}
</script>

<form action="ditScript.php" method="post" onSubmit="validateBrev();return false;">
<textarea id="brev" name="brev"></textarea>
<input type="submit">
</form>
Avatar billede nielle Nybegynder
17. august 2005 - 13:56 #6
... skal være:

<form action="ditScript.php" method="post" onSubmit="return validateBrev();">
Avatar billede ra__mus Nybegynder
17. august 2005 - 14:18 #7
hvordan kan Clientside validering meget nemt omgås i dette tilfælde ??
Avatar billede nielle Nybegynder
17. august 2005 - 14:22 #8
Man kan simpelthen slå JavaScript fra i browseren.
Avatar billede roenving Novice
17. august 2005 - 14:25 #9
Eller mere sandsynligt (heller ikke sandsynligt !-) konstruere sin egen form, som submitter 'fejl'-data !o]
Avatar billede ra__mus Nybegynder
17. august 2005 - 14:27 #10
okay men det javascript herover fungerer fint.. vil gerne checke for det samme server side i php.. Hvordan skal det se ud ??
Avatar billede ra__mus Nybegynder
17. august 2005 - 14:28 #11
Altså noget med at man kommer tilbage til formen igen hvis et ord er over 40 tegn langt..
Avatar billede nielle Nybegynder
17. august 2005 - 14:34 #12
Serverside ser det ud som allerede vist i 17/08-2005 13:24:24 eller 17/08-2005 13:24:28. Det skal selvfølgeligt lige tilrettes lidt.

Hvis du vil sende folk tilbage til formen så er det:

<?php
header('Location: http://www.ditDomæne.dk/dinFormSide.php');
?>
Avatar billede ra__mus Nybegynder
17. august 2005 - 14:58 #13
jeg har nu :

$alleOrd = explode(" ", $_POST['brev']);
$maxLen = 10;
foreach ($alleOrd as $ord)
{
    if (strlen($ord) > $maxLen)
    {
        $maxLen = strlen($ord);
    }
}
echo strlen($maxLen); exit;

men den skriver 2 hvergang ???
Avatar billede nielle Nybegynder
17. august 2005 - 15:07 #14
Ret:

echo strlen($maxLen); exit;

- til:

echo $maxLen;
exit;

Jeg gætter på at den skriver 2 fordi teksten "24" (eller hvad din målte længde er) netop er to tegn lang.
Avatar billede ra__mus Nybegynder
17. august 2005 - 16:24 #15
ja det var rigtigt..
Men selvom der ikke er ord der overskrider de 40 tegn så kommer jeg alligevel tilbage til formen ?? her er mit script :

$maxLen1= '0';
$alleOrd = explode(" ", $_POST['brev']);
$maxLen = '40';
foreach ($alleOrd as $ord)
{
    if (strlen($ord) > $maxLen)
    {
        $maxLen1 = strlen($ord);
    }
   
}

if (trim($_POST['emne']) !='' && trim($_POST['brev']) !='' && $maxLen1 < 41) {
***skulle gerne komme ind i denne sætning men gør det ikke selvom jeg ikke har ord der er længere end 40 tegn....  }

else  {
$viser = '';
if (!empty($_POST['vis'])) {
$viser = $_POST['vis'];
}

header("Location: ../postkassen_tom.php?vis=". $viser ."&maxLen1=".$maxLen1."");
exit;
}
Avatar billede ra__mus Nybegynder
17. august 2005 - 16:31 #16
den regner mellemrum som tegn... hvordan undgår jeg det ??
Avatar billede ra__mus Nybegynder
17. august 2005 - 16:35 #17
tror også den summere tegnene op, og når der så er mere end 40 ialt så går det galt..
Det er det enkelte ord der ikke må indeholde mere end 40 tegn !!
Avatar billede nielle Nybegynder
17. august 2005 - 16:39 #18
Når man regner med tal, så skal man ikke pludselig blande tekst ind i det. Jeg har derfor bl.a. fjernet de '-tegn som du havde sat rundt om dine "tal":

$maxLen = -1;
$alleOrd = explode(" ", $_POST["brev"]);
foreach ($alleOrd as $ord)
{
    if (strlen($ord) > $maxLen)
    {
        $maxLen = strlen($ord);
    }
}

$maxLenTilladt = 40;

if (trim($_POST['emne']) != "" && trim($_POST['brev']) != "" && $maxLen <= $maxLenTilladt)
{
    // *** skulle gerne komme ind i denne sætning men gør det ikke selvom jeg ikke har ord der er længere end 40 tegn....
}
else
{
    $viser = (!empty($_POST["vis"])) ? $_POST["vis"] : "";
    header("Location: ../postkassen_tom.php?vis=" . $viser . "&maxLen1=" . $maxLen);
}
Avatar billede ra__mus Nybegynder
17. august 2005 - 17:06 #19
header("Location: ../postkassen_tom.php?vis=" . $viser . "&maxLen=" . $maxLen);
skal det vel være ??
Men jeg får stadig problemer når feks jeg skriver :

aaaaaa
aaaaaa
aaaaaa
aaaaaa
aaaaaa
aaaaaa

så er $maxLen=46
Avatar billede ra__mus Nybegynder
17. august 2005 - 17:36 #20
Det er når jeg bruger enter i feltet og skifter linie at problemet opstår...
Avatar billede nielle Nybegynder
17. august 2005 - 18:46 #21
Det er fordi at enter bliver til et helt andet tegn end et mellemrum. Denne variant tager højde for den situation:

$brev = $_POST["brev"];
$brev = preg_replace("/\s+/", " ", $brev);
$alleOrd = explode(" ", $brev);

$maxLen = -1;
foreach ($alleOrd as $ord)
{
    if (strlen($ord) > $maxLen)
    {
        $maxLen = strlen($ord);
    }
}

echo $maxLen;
Avatar billede ra__mus Nybegynder
21. august 2005 - 22:23 #22
fint det funker. læg et svar nielle !
Avatar billede nielle Nybegynder
21. august 2005 - 22:27 #23
Svar :^)
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