Avatar billede bearhugx Nybegynder
11. april 2003 - 10:21 Der er 24 kommentarer og
1 løsning

trim() metode

Jeg sidder her med en form-validering - og har fundet ud af, at javascript mangler en trim-metode - for den godtager åbenbart at brugernavn kan være
" " (bemærk mellemrum)

Da jeg ikke er så stærk i RegExp, så tænke jeg, om der var en af jer, som ville tjene 10 lette ved at lave en RegExp, som fjerne alle mellemrum fra starten og slutningen af strengen således at
  "      "  bliver til  ""  -- og
  "  abc "  bliver til  "abc"

/Søren
Avatar billede bearhugx Nybegynder
11. april 2003 - 10:22 #1
Gerne som en javscript function som
  function trim ( string ) {
    // foretag trimming...
    return trimmedString;
  }
Avatar billede erikjacobsen Ekspert
11. april 2003 - 10:30 #2
Du kan lege lidt med den her.

  var s="  hej med dig  ";
  var r;
  r=s.match(/^ +(.*?) +$/);
  alert("*"+r[1]+"*");
Avatar billede razor Nybegynder
11. april 2003 - 10:32 #3
Jeg ved ikke helt hvordan man opskriver regex på Javascript manér - men her er en måde :)

s/^ +//;
s/ +$//;

Eller hvis de er perl-kompatible:

s/^\s+//;
s/\s+$//;
Avatar billede jespernaur Nybegynder
11. april 2003 - 10:33 #4
Prøv denne:

function trim( str )
{
  return str.replace(/^\s+(.+)\s+$/, $1);
}
Avatar billede razor Nybegynder
11. april 2003 - 10:33 #5
erik - du kan sagtens fjerne ?'et, da * betyder 0 eller flere (og derved giver samme effekt) :)
Avatar billede jespernaur Nybegynder
11. april 2003 - 10:34 #6
Nej, i denne sammenhæng betyder ? 'ikke-grådig'
Avatar billede bearhugx Nybegynder
11. april 2003 - 10:40 #7
hmmm åbenbart virker det ikke hvis str = "" ??? - for der går den lige igennem

min test ser pt således ud  (i dette tilfælde jespers kode...)
function trim( str ) {
    return str.replace(/^\s+(.+)\s+$/, $1);
}

function checkFields() {
    err = "";
    if( trim( document.forms["frm1"].user.value )=="" ) {
        err = err + "\n    -  Name";
    }
        // bla bla bla.....
}
Avatar billede bearhugx Nybegynder
11. april 2003 - 10:40 #8
har i afprøvet jeres svar med en ""-streng ???
Avatar billede razor Nybegynder
11. april 2003 - 10:47 #9
jespernaur, jeg tror bare jeg holder mig væk fra andre en PCRE implementationer af Regular Expressions så :-)
Avatar billede razor Nybegynder
11. april 2003 - 10:49 #10
og jeg afholder mig også fra at stave ordentligt på denne tid af dagen :)
Avatar billede jespernaur Nybegynder
11. april 2003 - 10:52 #11
Åhh, åhh - en enkelt stavefejl kan vi vel lade passere
Avatar billede jespernaur Nybegynder
11. april 2003 - 11:22 #12
Pokkers, man SKAL teste og man skal gøre det HVER ENESTE GANG! Uanset hvor nemt det på forhånd ser ud. Heraf kan udledes, at det gjorde jeg ikke ovenfor, og det virkede heller ikke! Prøv denher i stedet:

function trim( str )
{
  return str.replace(/^\s+(.+?)\s+$/, "$1");
}
Avatar billede erikjacobsen Ekspert
11. april 2003 - 13:18 #13
Ikke:

return str.replace(/^\s*(.+?)\s*$/, "$1");

??
Avatar billede jespernaur Nybegynder
11. april 2003 - 13:29 #14
Behøves ikke, da JavaScript replace returnerer den uændrede streng hvis der ikke er nogen match
Avatar billede erikjacobsen Ekspert
11. april 2003 - 13:34 #15
Men hvis der kun er blanke forrest og ikke bagerst?
Avatar billede jespernaur Nybegynder
11. april 2003 - 13:43 #16
erik, du bliver ved, og DU HAR RET!!! Man skal ikke bare teste, man skal teste ORDENTLIGT!

function trim( str )
{
  return str.replace(/^\s*(.+?)\s*$/, "$1");
}

Detteher kvalificerer nok ikke længere som et svar.
Avatar billede erikjacobsen Ekspert
11. april 2003 - 13:47 #17
Det glæder mig at jeg en gang imellem, trods alt, både har ret og ved det... :)
Avatar billede jespernaur Nybegynder
11. april 2003 - 13:48 #18
Det er en fornøjelse for os alle, selv om det måske ikke lige her skete for mig.
Avatar billede bearhugx Nybegynder
11. april 2003 - 14:15 #19
Ok ... nu skal jeg lige have det på plads...
Hvilken af jeres trim() virker både ved 
- ""
- "xxx"
- "  xxx"
- "xxx  " og
- "  xxx  "

Jeg er lidt forvirret..

Og kan jeg (evt. for nogle flere points) få en overordnet gennemgang af, _hvorfor_ det pattern lige præcist fjerner leading og trailing spaces...
Avatar billede erikjacobsen Ekspert
11. april 2003 - 14:31 #20
jespernaur 11/04-2003 13:43:36 bør virke
Avatar billede jespernaur Nybegynder
11. april 2003 - 16:04 #21
Overordnet gennemgang:

return str.replace(/^\s*(.+?)\s*$/, "$1");

Det regulære udtryk er det der står imellem /.../

^    begyndelsen af strengen, efterfulgt af
\s*  0 eller flere forekomster af blanktegn, efterfulgt af
(.+?) et positivt men 'ikke-grådigt' antal af 'hvadsomhelst', efterfulgt af
\s*  0 eller flere forekomster af blanktegn, efterfulgt af
$    afslutningen af strengen

Parantesen omslutter det, der senere afleveres som $1, spørgsmålstegnet ('ikke-grådig') sørger for at parantesen ikke 'spiser' afsluttende blanktegn, således at den anden \s* kommer til at omfatte de afsluttende blanktegn.

Mvh
Jesper Naur
Avatar billede bearhugx Nybegynder
14. april 2003 - 15:08 #22
Det er ikke helt sort for mig mere - men dog stadig lidt... Jeg tror man skal have tid til at sætte sig ordenligt ind i regExp inden man kan forstå hvad der sker i ovenstående...

Nuvel ... Jeg har lige testet det - og det virker --- super!....

Jesper - points til dig...

/Søren Munk Skrøder
Avatar billede bearhugx Nybegynder
14. april 2003 - 15:12 #23
Hmmm ... åbenbart har jeg ikke testet ordenligt nok - for hvis strengen er
" " eller "      " (altså vilkårligt antal (over nul) [space] , så returneres " " som den trimmede streng :-(

Er det noget med den "ikke-grådige" ting ... Har ikke helt fattet det med grådighed...
Avatar billede erikjacobsen Ekspert
14. april 2003 - 15:14 #24
Prøv
  return str.replace(/^\s*(.*?)\s*$/, "$1");
Avatar billede bearhugx Nybegynder
14. april 2003 - 15:29 #25
erik >> super -- det virker :-)))
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
Kurser inden for grundlæggende programmering

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