Avatar billede zeusdk Nybegynder
02. marts 2003 - 11:43 Der er 7 kommentarer og
2 løsninger

Reg.exp: Check om link henviser til en side eller til roden

Hej

Jeg har et reg-exp-script, som checker om en brugers indtastede link henviser til en side (true) eller til (false) roden af domænet, subdomænet eller et underbibliotek.

Hvis brugeren indtaster følgende returner den FALSE:
http://en-hjemmeside.dk/
http://www.en-hjemmeside.dk/
http://en-hjemmeside.dk/underbib/
http://www.en-hjemmeside.dk/underbib/

Godt så! :-) Det virker fint, og nu kommer det, som du gerne må hjælpe mig med at udbygge.

Den burde også returnere FALSE ved:
http://en-hjemmeside.dk
http://www.en-hjemmeside.dk
http://en-hjemmeside.dk/et-underbib
http://www.en-hjemmeside.dk/et-underbib

Og så burde den returnere TRUE ved:
http://en-hjemmeside.dk/en-side.htm
http://www.en-hjemmeside.dk/en-side.htm
http://en-hjemmeside.dk/et-underbib/en-side.htm
http://www.en-hjemmeside.dk/et-underbib/en-side.htm

Alle delenene af de nævnte adresser er vilkårlige, så når jeg f.eks. skriver ".htm" mener jeg selvfølgelig også .asp, .php osv. osv.

_____________________________________________________________

if (document.henvisning.link.value.match(/(\/\/[^\/]+)((\/[^\/\.]+)*)$/, '$1$2/'))
  return true;
else
  return false;
Avatar billede jespernaur Nybegynder
02. marts 2003 - 14:23 #1
Ud fra dine testeksempler er jeg kommet frem til, at det du ønsker at acceptere er karakteriseret ved, at der efter den sidste skråstreg skal stå et filnavn, der indeholder et punktum. Der skal selvfølgelig her ses bort skråstregerne i http://.

Du burde kunne skrive

if (document.henvisning.link.value.match(/\/\/.+\/[^\/]+\.[^\/]+$/))
  return true;
else
  return false; 

Mvh
Jesper Naur
Avatar billede zeusdk Nybegynder
02. marts 2003 - 17:28 #2
Hej Jesper - regmanden over alle regmænd :-)

Jeg har indsat koden i min eksisterende kode, som du sikkert vil kunne genkende fra tidligere.

if (document.henvisning.linkType[1].checked) {
        if (!document.henvisning.link.value.match(/\/\/.+\/[^\/]+\.[^\/]+$/)) {
            alert('Fejl: Det indskrevne link henviser ikke til en artikel på en hjemmeside. Den korrekte adresse ville f.eks. være: http://www.hjemmeside.dk/artikel.htm');
            return false;
        }
    }

    if (document.henvisning.linkType[2].checked) {
        if (document.henvisning.link.value.match(/\/\/.+\/[^\/]+\.[^\/]+$/)) {
            if (window.confirm('Er det korrekt, at henvisningen linker til forsiden af en hjemmeside?')) {
                var txt = document.henvisning.link.value; 
                txt = txt.replace(/(\/\/[^\/]+)((\/[^\/\.]+)*)$/, '$1$2/')
                document.henvisning.link.value = txt.replace(/[^\/]*$/, '')
            }
            else {
                alert('Fejl: Det indskrevne link henviser ikke til forsiden af en hjemmeside. Den korrekte adresse ville f.eks. være: http://www.hjemmeside.dk/');
                return false;
            }
        }
    }

Først del, hvor der checkes om der er tale om en side - f.eks.: http://www.hjemmeside.dk/side.htm - virker perfekt :-)

Men den næste del, hvor der skal checkes om der er tale om roden på en hjemmeside - f.eks.: http://www.hjemmeside.dk/ virker ikke helt helt. Den konkludere bare, at hvis ikke der er tale om en side, jammen så må der være tale om "roden". Og det er jo ikke helt rigtigt, fordi hvis nu man fejlagtigt skriver:
http://www.hjemmeside - så siger den, at det ikke er en artikel og så må det være roden.

Så kan man ikke udbygge lidt på det script, hvor der checkes om der er tale om roden, så den ikke antager at fejlagtigt adresse er "roden"?
Avatar billede zeusdk Nybegynder
02. marts 2003 - 17:30 #3
helt helt = helt
konkludere = konkluderer
artikel = side
at fejlagtigt adresse = at en fejlagtigt adresse
Avatar billede jespernaur Nybegynder
03. marts 2003 - 20:36 #4
Jeg vil hævde, at den kode, jeg har vist ovenfor, besvarer dit oprindelige spm: Du har vist 8 eksempler hvor den skal returnere FALSE, og 4 hvor den skal returnere TRUE. Dette opfyldes af den kode, jeg har angivet.

Din senere kommentar antyder, at du i virkeligheden har brug for noget andet - det fik du i første omgang ikke, da dit virkelige problem ikke var synligt i spørgsmålet. Præcision i formuleringen af spørgsmålet er den vigtigste forudsætning, hvis man ønsker et brugbart svar.

Så vidt jeg kan gennemskue (men ganske sikker er jeg ikke), er du tilfreds med det der foregår, når ....linkType[1].checked er true.

Det er selvfølgelig klart, at det har ringe mening at teste på det samme, når ...linkType[2].checked er true, hvis man ønsker at opnå noget andet. Det er mig ikke ganske klart, hvad du præcist ønsker at opnå her - det må du prøve på at beskrive så nøjagtigt du kan, og desuden vise typiske eksempler på links, der skal accepteres og links, der skal afvises.
Avatar billede zeusdk Nybegynder
04. marts 2003 - 15:15 #5
Du har helt ret i det, som du skriver :)

Så vidt jeg kan se, mangler scriptet at checke om landekoden er indskrevet. Hvis jeg glemmer landekoden, når jeg indskriver adressen til en side (linkType[1]):

1) http://www.hjemmeside/side.htm

Retunerer den fejlagtigt true, og hvis jeg ligeledes glemmer landekoden under indskrivningen af et domæne (linkType[2]):

2) http://www.hjemmeside
3) http://www.hjemmeside/

Retunerer den også fejlagtigt true.

Så hvis scriptet kan udbygges med et landekode-check, er alt, som det bør være :-)
Avatar billede zeusdk Nybegynder
04. marts 2003 - 15:21 #6
Når du udbygger scriptet med landekode-delen, skal du lige tænke på, at nogle adresser godt kan skrives uden "www.", hvorved et simpelt "landekode-punktum-checke-script" vil få problemer. Måske kan scriptet med fordel deles op i 2 udtryk... jeg ved det ikke, jeg er ikke eksperten :-)
Avatar billede zeusdk Nybegynder
07. marts 2003 - 21:46 #7
Er den for svær eller holder du bare en pause med besvaringen :-)
Avatar billede zeusdk Nybegynder
12. marts 2003 - 13:34 #8
Er du der? :-)
Avatar billede zeusdk Nybegynder
15. marts 2003 - 16:49 #9
Jeg bliver nødt til lukke indlægget nu, da jeg har brug for et svar :-)
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