Avatar billede kgp43 Nybegynder
04. januar 2006 - 14:18 Der er 18 kommentarer og
1 løsning

Validering af textarea

Hejsa,

Hvordan forhindre jeg følgende:

- Ord der er længere end 30 char.
- Text der fylder mere end 5 linier.
Avatar billede nizo Nybegynder
04. januar 2006 - 14:53 #1
til den første "kun 30 tegn i et ord", ville jeg bruge:

<?
$word = explode(" ", $_POST['text']);
$count = count($word);
for($i = 0; $i <= $count; $i++)
{
  if(strlen($word[$i]) >= 30)
  {
    echo "Word #" . $i . " is larger than 30 chars\n<br />";
  }
}
?>

Men med den anden ved jeg ikke..
Avatar billede jaw Nybegynder
04. januar 2006 - 15:08 #2
Nummer 2 bliver jo ret svær, for mere end 5 linier hvor? I dit textarea der er pixel-defineret eller i dit udskrift som egentlig kommer an på hvilken tekststørrelse bruger har i sin browser.
Avatar billede Slettet bruger
04. januar 2006 - 15:11 #3
<?php
// Config
$maxLineBreaks = 5;
$maxWordLength = 30;

$testString = "String der skal testes";

// RegExps
$patternLinebreaks = sprintf("/(.*(\\r)?\\n){%d}/m", $maxLineBreaks + 1);
$patternWordLength = sprintf("/[\\S.,\\-]{%d}/m", $maxWordLength + 1);

// Test
if (preg_match_all($patternLinebreaks, $testString, $m) > 0 || preg_match_all($patternWordLength, $testString, $m) > 0) {
    echo "Overholder ikke kravene.";
}
?>
Avatar billede Slettet bruger
04. januar 2006 - 15:11 #4
Er dog testet, så der tages forbehold for fejl :-)
Avatar billede Slettet bruger
04. januar 2006 - 15:11 #5
testet = Utestet ;-)
Avatar billede kgp43 Nybegynder
04. januar 2006 - 15:19 #6
kan man lave det, så der ikke kan skrives mere end 5 linier, direkte i textarea feltet (sammen med overstående kode)?
Avatar billede Slettet bruger
04. januar 2006 - 15:21 #7
Ja, men så skal du over i JavaScrpt kategorien.
Avatar billede kgp43 Nybegynder
04. januar 2006 - 15:37 #8
Det vil jeg prøve.

Den første kode (max word length) virker ikke - det der ud til at den ligger alle ordene sammen, hvilken er forkert.

Vil forhindre "ord" som "adsasdgdfdfjkdfjsdlkfjlkajdlsakdjaslkdjadjasdlkjdlkflflkj"
Avatar billede kgp43 Nybegynder
04. januar 2006 - 16:32 #9
gartzen: Den poster ikke nogen fejl (gælder begge)


// Check if description has more than 5 rows and words above 30 chars
    // Config
    $maxLineBreaks = 5;
    $maxWordLength = 30;
   
    // RegExps
    $patternLinebreaks = sprintf("/(.*(\\r)?\\n){%d}/m", $maxLineBreaks + 1);
    $patternWordLength = sprintf("/[\\S.,\\-]{%d}/m", $maxWordLength + 1);
   
    // Test
    if (preg_match_all($patternLinebreaks, $description, $m) > 0 || preg_match_all($patternWordLength, $description, $m) > 0) {
       
        // Post error message
        $status = 67;
        include "/home/savemov/include/status_error.php";
        exit();
    }
Avatar billede nizo Nybegynder
04. januar 2006 - 17:20 #10
kgp43, min tager nemig højde for de ting, den kigger hver ord igennem og tjekker det for fejl..
Avatar billede kgp43 Nybegynder
04. januar 2006 - 17:29 #11
nizo: det kommer ikke med fejl, hvis et ord fylder mere end 30 tegn.
Avatar billede nizo Nybegynder
04. januar 2006 - 18:05 #12
Saa gør du noget forkert, for scriptet er testet.
Avatar billede nizo Nybegynder
04. januar 2006 - 18:06 #13
Det skal jo være i forbindelse med en POST forsendelse i browseren..
Avatar billede kgp43 Nybegynder
04. januar 2006 - 18:23 #14
Har fundet fejlen (nizo).
Hvis der er linieskift, så antager den at det sidste ord på forrige linie og det første ord på ny line er det samme (eller sådan noget).

sssssssssssssssssssss (21 chars)
ffffffffff (10 chars)

= ét ord på 31 chars (i følge dit script).
Avatar billede kgp43 Nybegynder
04. januar 2006 - 18:29 #15
det er fordi at linieskiftene fylder nogle tegn.

hvis du kan få det "liniskift-tælle" script til at virke, så burde dette bruges:

// Check if a word is more than 30 chars + row chars (\r \n)
$words = explode(" ", $description);
$count = count($words);
for($i = 0; $i <= $count; $i++)
{
    if(strlen($words[$i]) >= (30 + ($patternLinebreaks*2))) {
   
        // Post error message
        $status = 66;
        include "/home/savemov/include/status_error.php";
        exit();
    }
}
Avatar billede kgp43 Nybegynder
04. januar 2006 - 18:29 #16
du = vi :)
Avatar billede nizo Nybegynder
04. januar 2006 - 18:39 #17
// Check if a word is more than 30 chars + row chars (\r \n)
$words = explode(" ", $description);
$lines = explode("\n", $description);
$count = count($words);

if(count($lines) >= 5)
{
    echo "error";
}
for($i = 0; $i <= $count; $i++)
{
    if(strlen($words[$i]) >= 30) {
 
        // Post error message
        $status = 66;
        include "/home/savemov/include/status_error.php";
        exit();
    }
}
Avatar billede kgp43 Nybegynder
04. januar 2006 - 20:42 #18
Har fået det til at virke.

Nizo: lig et svar så er der point.
Avatar billede nizo Nybegynder
04. januar 2006 - 21:20 #19
Godt du fik det til at virke :)
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