Avatar billede Slettet bruger
07. maj 2008 - 23:11 Der er 5 kommentarer

exclude match hvis domain er http://www.dk (invalid)

Hej Eksperter,

Jeg skal bruge et regex der kan validere et domæne.

Følgende er allerede på plads:

^(https?:\/\/)?(www([0-9]+)?[.])?([a-z]+[.])+[a-z]{2,3}$

Ovenstående vil matche med og uden protocol og med/uden "www" på eksempelvis:

http://mysite.com
http://www.mysite.com
http://www1.mysite.com
https://mysite.com
https://www.mysite.com
http://subdomain.mysite.com

Det eneste problem jeg har nu, er at ovenstående regex vil matche protocol, efterfulgt af måske www, men intet domæne efterfulgt af top-level domæne:

http://www.com/

Jeg vil gerne have regexet til også at kunne matche:

http://w.com
http://ww.com
http://we.com
http://wwwe.com
http://www.mysite.com

Men IKKE: http://www.com

Dvs 3 på hinanden følgende "www" efterfulgt af et punktum er ikke ok.

Er der mon nogen som kan en snedig regex-ninja til at fikse den?

På forhånd tak.

:-)
Avatar billede nielle Nybegynder
08. maj 2008 - 10:34 #1
Det kan du ikke med en enkelt regexp.

Desuden er det nu også noget tvivlsomt hvad værdien skulle være. Der er nemlig intet som helst magisk ved de tre www’er – det er mere en konvention end en standard. De kan f.eks. sagtens bruges som et lovligt domæne. Derfor er

www.com

lige så lovligt et url som f.eks.:

ww.com
wwww.com

Angående dit oprindelige mønster:

^(https?:\/\/)?(www([0-9]+)?[.])?([a-z]+[.])+[a-z]{2,3}$

- så bør dette rettes til:

^(https?:\/\/)?(www[0-9]*\.)?([a-z]+\.)+[a-z]{2,6}$

Imidlertid ville dette faktisk smide en masse lovlige urls væk!

Et mere korrekt mønster er dette:

^(https?:\/\/)?([\w-]+\.)+[a-z]{2,6}$
Avatar billede Slettet bruger
08. maj 2008 - 12:01 #2
Hej Nielle,

Jeg havde håbet på at man kunne lave eksempelvis capture-groups eller look-ahead /look-back noget for at kunne se om der var en www sekvens som man så kunne arbejde videre med i det samme regex.

Hvordan skriver man så et regex som matcher

w
ww
www

men ikke:
we
wwe
wwwe

?


Jeg er dog ikke enig i dit korrekte mønster, for det accepterer nedenstående:
http://wffddfpeewqww1.mysite.com.ci.dkddee

Det er jeg slet ikke interesseret i.

Jeg vil derfor gerne fastholde mønsteret nogenlunde:
(https?:\/\/)?(www([0-9]+)?[.])?([.]?[a-z]+[.])+[a-z]{2,3}

- Der er (måske) en protocol (http/https)
- Der er (måske) www (måske efterfulgt af 1-9+) og en .
- der er (måske én . efterfulgt af én eller flere a-z, afsluttet med .)
- og ender på hhv 2 eller 3 a-z (afsluttet med dk,com,net etc. - et nogenlunde realistisk top-level domæne)

Jeg er ligeglad med hvad der efterfølgende er adresse-feltet, det er ikke en url matcher, men derimod et "sanity-check" om et indtastet domæne er nogenlunde realistisk så at sige :-)
Avatar billede nielle Nybegynder
08. maj 2008 - 19:40 #3
> Hvordan skriver man så et regex som matcher
>
> w
> ww
> www
>
> men ikke:
> we
> wwe
> wwwe

Sådan:

w+

- men jeg har på fornemmelsen at der et lidt mer til spørgsmålet?

Hvorfor vil du i øverigt ikke matche "wwwe"? Det er et fuldt lovligt navn på et subdomane.

> Jeg er dog ikke enig i dit korrekte mønster, for det accepterer nedenstående:
> http://wffddfpeewqww1.mysite.com.ci.dkddee

Og hvorfor præcist er du så imod det?

> Jeg vil derfor gerne fastholde mønsteret nogenlunde:
> (https?:\/\/)?(www([0-9]+)?[.])?([.]?[a-z]+[.])+[a-z]{2,3}

Jeg har to indvendinger i mod dette:

1)

Hvorfor vil du udelukke en masse lovlige urls?

Hvad f.eks. med de lovlige TLD'er 'museum', 'name' eller 'asia'? Hvorfor indskrænke til kun 3 tegn i TLD? Desuden tillader dit eget en masse TLD'er som ikke er lovlige.

Eller hvad med dette:

www.123hotel.dk

Det er ellers et lovligt dømaine -og så er i brug.

I øvrigt kan du validere lige så meget du ønsker, men det giver jo bare ikke nogen garanti for at url'et rent faktisk virker.

2)

Rent regex-mæssigt så er mit første bud nu stadig mere stilrent:

^(https?:\/\/)?(www[0-9]*\.)?([a-z]+\.)+[a-z]{2,3}$
Avatar billede nielle Nybegynder
14. maj 2008 - 06:54 #4
Har du fået kigget på det?
Avatar billede nielle Nybegynder
17. juni 2008 - 06:33 #5
??
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