Avatar billede braghe90 Nybegynder
12. november 2002 - 11:42 Der er 6 kommentarer og
1 løsning

Cirklens ligning i Javascript

Jeg ved kun meget lidt om reg.exp., og vil derfor høre om, der er der kan fortælle mig, hvordan jeg i javascript kan afgøre, om en streng er skrevet med 'syntaxen' "(x-n)^2+(y-n)^2=n" (hvor 'n' er et vilkårligt tal; ikke kun heltal)
Avatar billede jespernaur Nybegynder
12. november 2002 - 20:37 #1
Du kan bruge følgende regulære udtryk:

^\(x[-+][0-9]+([,.][0-9]+)?\)\^2\+\(y[-+][0-9]+([,.][0-9]+)?\)\^2=[0-9]+([,.][0-9]+)?$

Det ser måske lidt uhyggeligt ud, men kigger man nærmere efter er det ikke så galt endda. Vi starter med del-udtrykket for et tal (det du kalder 'n', jeg går ud fra at der kan være tale om forskellige tal), det går identisk igen 3 gange undervejs:

[0-9]+([,.][0-9]+)?

Et positivt antal cifre, efterfulgt af
0 eller 1 forekomst af: komma-eller-punktum efterfulgt af et positivt antal cifre.

Vi har altså


^\(x[-+]                Begyndelsen af strengen fulgt af (x fulgt af + eller -

[0-9]+([,.][0-9]+)?    Et tal

\)\^2\+\(y[-+]          )^2+(y fulgt af + eller -

Mvh
Jesper Naur
Avatar billede jespernaur Nybegynder
12. november 2002 - 20:57 #2
Ups, der smuttede halvdelen af forklaringen - vi tager det hele en gang til:

Vi har altså

^\(x[-+]                Begyndelsen af strengen fulgt af (x fulgt af + eller -

[0-9]+([,.][0-9]+)?    Et tal

\)\^2\+\(y[-+]          )^2+(y fulgt af + eller -

[0-9]+([,.][0-9]+)?    Et tal

\)\^2=                  )^2=

[0-9]+([,.][0-9]+)?$    Et tal fulgt af strengens afslutning.


Mvh
Jesper Naur
Avatar billede braghe90 Nybegynder
13. november 2002 - 11:58 #3
Betyder '?', at indeholdet af parantesen foran ikke nødvendigvis skal være med?
Bliver \ blot brugt til at escape tegn?
Hvad betyder '^' (forest)?

Hvis du lige besvarer ovenstående spørgsmål får du pointene (btw, meget gennemført svar :) )
Avatar billede braghe90 Nybegynder
13. november 2002 - 13:38 #4
Der er vist sket et eller andet underligt med dine svar, så kunne du ikke skrive dit reg.exp. igen? (ikke forklaringen, blot det regulære udtryk)
Avatar billede jespernaur Nybegynder
13. november 2002 - 17:15 #5
Her er hele udtrykket endnu engang - heldigvis havde jeg det gemt et sikkert sted.

^\(x[-+][0-9]+([,.][0-9]+)?\)\^2\+\(y[-+][0-9]+([,.][0-9]+)?\)\^2=[0-9]+([,.][0-9]+)?$

Yderligere forklaring:

? betyder '0 eller 1 forekomst af det umiddelbart foregående', her indholdet af parantesen.

^ forrest betyder 'stregens begyndelse', som det er brugt her, betyder det at der ikke må være nogetsomhelst i strengen før den første (
Afsluttende $ har samme betydning for slutningen af strengen.

Samtlige anvendelser af \ er for at 'escape' tegn, der ellers har specialbetydning regulære udtryk.

Mvh
Jesper Naur
Avatar billede braghe90 Nybegynder
13. november 2002 - 18:07 #6
Kan du så ikke fortælle mig en sidste ting: Hvordan tester jeg om en streng matcher kriterierne i ovenstående regulære udtryk?
Avatar billede jespernaur Nybegynder
13. november 2002 - 18:45 #7
Der er flere måder, her er en af dem:

var regex = new RegExp( /^\(x[-+][0-9]+([,.][0-9]+)?\)\^2\+\(y[-+][0-9]+([,.][0-9]+)?\)\^2=[0-9]+([,.][0-9]+)?$/ );

var txt = <den streng der skal undersøges>;

if (txt.match(regex)) {
  // matcher
}
else {
  // matcher ikke
}
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