19. august 2001 - 23:57Der 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.
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 :-))
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>
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:
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 \\
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\' :-))
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 :-)
Synes godt om
Ny brugerNybegynder
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.