Avatar billede jette1 Nybegynder
19. august 2001 - 23:57 Der er 8 kommentarer og
1 løsning

Endnu et regexp problem

Jeg forsøger her at teste om x er en valid sti til en jpg eller gif fil:

<SCRIPT language=JavaScript1.2>
  var x = \"c:\\billeder\\mitbillede.jpg\";
  var pattern = new RegExp(/^[a-zA-Z]{1}:.+\\.jpg$|^[a-zA-Z]{1}:.+\\.gif$/);
  var tjek = x.match( pattern );
  var y = tjek.length;
  document.write(y+\"<br>\");
  document.write(tjek[0]);
</SCRIPT>

Når jeg afvikler det i browseren, får jeg dette resultat:

1
c:illedermitbillede.jpg

tegn nr. 3 og 4 dvs. \\ og b er erstattet af en firkant, og den anden \\ er helt udeladt.

Hvad skyldes det?
Avatar billede jakoba Nybegynder
20. august 2001 - 00:06 #1
det skyldes at skråstregerne i din url \'hælder mod venstre\'. Det er det samme escape tegn du bruger i regexp strenget for at sikre at punktummet ses som et punktum snarere end som \"et eller andet tegn\"-specialbogstavet.

foran m bliver \\ blot udeladt (forstås som \'dette m er et m\')
foran b ser det ud til at \\ har en specialbetydning der resulterer i det er underlige tegn.

du kan undgå fejlen ved at sige:
  var x = \"c:\\\\billeder\\\\mitbillede.jpg\";
den første \\ fortæller at den anden blot er bogstavet \\.

Når din side kommer på nettet forsvinder \'fejlen\' for der går skråstregerne den rigtige vej :-))

mvh JakobA
Avatar billede roenving Novice
20. august 2001 - 00:08 #2
Det hurtige gæt:

\\ er escape-karakter for regexp (du bruger det jo også til at sikre læsning af . ).

hvis du nu erstatter \\ med / (som jo gælder for browseren) ku\' jeg tro at det virkede.

hth
jes

PS. Har du set at der er en Reg.Exp.-kategori
Avatar billede jette1 Nybegynder
20. august 2001 - 07:05 #3
Jakob A --> Du har ret... tak for et godt svar :-)

roenving --> Nej, jeg var ikke klar over at regexp har sin egen kategori, det vil jeg huske til næste gang. Tak for tippet! :-)
Avatar billede jakoba Nybegynder
20. august 2001 - 07:26 #4
testede lige, det ser ud til at konstruktionen:
      new RegExp( param );
kræver at param er en streng (med \" eller \' om). Når det skrives som regexp (med / om) får jeg syntaksfejl.

de 2 //ok -linier nedenfor virker bedre (metoden er den samme som ovenfor med et ekstra \\ tegn for at gøre \\ til et bogstav i strengen).

<SCRIPT language=JavaScript1.2>
  var x = \"c:\\\\billeder\\\\mitbillede.jpg\";
//ok  var pattern = new RegExp(\"^[a-zA-Z]{1,1}:.+\\\\.jpg$|^[a-zA-Z]{1,1}:.+\\\\.gif$\");
//ok  var pattern = /^[a-zA-Z]{1,1}:.+\\.jpg$|^[a-zA-Z]{1,1}:.+\\.gif$/;
  var pattern = /^[a-zA-Z]{1,1}:.+\\.jpg$|^[a-zA-Z]{1,1}:.+\\.gif$/;
  var tjek = x.match( pattern );
  var y = tjek.length;
  document.write(y+\"<br>\");
  document.write(tjek[0]);
</SCRIPT>

mvh JakobA
Avatar billede jette1 Nybegynder
20. august 2001 - 07:59 #5
Nu er jeg ikke helt med. Den \\ jeg indsætter lige før .jpg og .gif, er til for at fortælle at punktummet skal tages bogstaveligt.
Burde der så ikke være 3 \\, som her:

RegExp(\"^[a-zA-Z]{1,1}:.+\\\\\\.jpg$|^[a-zA-Z]{1,1}:.+\\\\\\.gif$\");

Iøvrigt ville jeg egentlig helst undgå at tjekke om der er \\ i stien , da jeg jo ikke kan vide om brugerens sti er:

c:\\mitbillede.jpg      eller
c:\\minefiler\\billeder\\mitbillede.jpg

Håber du forstår hvad jeg mener :-)
Avatar billede roenving Novice
20. august 2001 - 08:19 #6
Hva\' med at lave en replace af de der \\\\ før du validerer strengen, for det er vel meningen, at det er browseren, som skal bruge stien - og den forstår jo / lige så godt som \\

?~)
Avatar billede jette1 Nybegynder
20. august 2001 - 08:32 #7
roenving --> Go\' ide :-) ... det vil jeg gøre.
Avatar billede jakoba Nybegynder
20. august 2001 - 08:52 #8
det dobbelte \\ i  +\\\\.jpg  har ikke noget at gøre med at checke for \\-tegn.
formålet er alene at undgå at \\. bliver set som \"altså bogstavet .\" idet strengen gives som parameter.
Det skal først tolkes sådan bagefter, indeni RegExp construktoren.

i parameteren skrives en srengkonstant:
        +\\\\.jpg
idet kaldet foretages fortolkes første \\ til at betyder det \\ der står efter mig er bogstavet \\ ikke et styretegn. så parameteren til regexp funktionen er faktisk:
        +\\.jpg
den streng fortolker funktionen så så punktummet bliver et \"bogstavet .\" idstedet for styretegnet \"et eller andet bogstav\".

Nogen gange kunne man godt ønske at computere brugte lidt mere \'intuitiv logik\' :-))

mvh JakobA
Avatar billede jette1 Nybegynder
20. august 2001 - 09:04 #9
JakobA --> Well, jeg tror at jeg har en a-ha oplevelse tilgode i den retning :-) ... så indtil der en dag går et lys op for mig, vil jeg benytte mig af eksperterne :-)
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