Avatar billede rrm Nybegynder
26. august 2005 - 14:00 Der er 10 kommentarer og
1 løsning

URL validering

Jeg forsøger at validere en url efter følgende skema: http://www.cse.ohio-state.edu/cgi-bin/rfc/rfc1738.html sektion 5.

Jeg er kommet frem med følgende:
const string RE_ALPHA = "([a-z]|[A-Z])";
const string RE_DIGIT = "[0-9]";
const string RE_DIGITS = RE_DIGIT + "+";
const string RE_HEX = "(" + RE_DIGIT + "|[A-F]|[a-f])";

const string RE_ALPHA_DIGIT = "(" + RE_ALPHA + "|" + RE_DIGITS + ")";

const string RE_UNRESERVED = "(" + RE_ALPHA + "|" + RE_DIGIT + "|[$-_.+]|[!*'(),])";

const string RE_DOMAIN_LABEL = "" + RE_ALPHA_DIGIT + "|" + RE_ALPHA_DIGIT + "(" + RE_ALPHA_DIGIT + "|-)*" + RE_ALPHA_DIGIT;
const string RE_TOP_LABEL = "(" + RE_ALPHA + "|" + RE_ALPHA + "(" + RE_ALPHA_DIGIT + "|-)*" + RE_ALPHA_DIGIT + ")";

const string RE_HOST_NUMBER = "(" + RE_DIGITS + "." + RE_DIGITS + "." + RE_DIGITS + "." + RE_DIGITS + ")";

const string RE_HOSTNAME = "(" + RE_DOMAIN_LABEL + ".)*" + RE_TOP_LABEL;

const string RE_UCHAR = RE_UNRESERVED + "|%" + RE_HEX + RE_HEX;

const string RE_HSEGMENT = "(" + RE_UCHAR + "|[;:@&=])*";

const string RE_HPATH = RE_HSEGMENT + "(/" + RE_HSEGMENT + ")*";
const string RE_SEARCH = "(" + RE_UCHAR + "|[;:@&=])*";

const string RE_HOST = "^(" + RE_HOSTNAME + "[:/]){1}?"; //+ RE_HOST_NUMBER + "|" +
const string RE_PORT = "^(:" + RE_DIGITS + "/)?";
const string RE_PATH = "^(/" + RE_HPATH + "([?]" + RE_SEARCH + ")?){1}?";

Men det fungere ikke efter hensigten, idet følgende "godkendes" www.d+r.dk. Hvordan laver man så f.eks. kun bogstaverne A-Z godkendes i en streng.
Avatar billede roenving Novice
26. august 2005 - 14:05 #1
Hvilket programmeringssprog arbejder du i ?-)

-- og skal dine første linjer ikke se sådan ud:

const string RE_ALPHA = "([a-zA-Z])";
const string RE_DIGIT = "\d";
const string RE_DIGITS = "\d+";
const string RE_HEX = "[\dA-Fa-f]";
Avatar billede nielle Nybegynder
26. august 2005 - 14:13 #2
Så vidt jeg kan se, er det dig selv som tillader at '+' kan indgå via denne her deklaration:

const string RE_UNRESERVED = "(" + RE_ALPHA + "|" + RE_DIGIT + "|[$-_.+]|[!*'(),])";
Avatar billede rrm Nybegynder
26. august 2005 - 16:27 #3
jeg arbejder i c++ og bruger pcre til at evaluere udtrykket med.

roenving -> Betyder det ikke de samme??? [a-zA-Z] og [a-z]|[A-Z] ??

nielle -> Jeg evaluere de tre udtryk Host, port og path hver for sig. Så ved www.d+r.dk bruger jeg kun RE_HOST til at parse det med
Avatar billede nielle Nybegynder
26. august 2005 - 18:34 #4
Så er det nok denne her:

const string RE_HOSTNAME = "(" + RE_DOMAIN_LABEL + ".)*" + RE_TOP_LABEL;

- som skal rettes til:

const string RE_HOSTNAME = "(" + RE_DOMAIN_LABEL + "\.)*" + RE_TOP_LABEL;
Avatar billede roenving Novice
27. august 2005 - 01:07 #5
>>rrm @16:27:49

-- jo, de betyder det samme, men da regexp i forvejen er utroligt langsomme i eksekvering, er der ingen grund til at lægge ekstra opgaver i maskinen !-)
Avatar billede rrm Nybegynder
27. august 2005 - 10:10 #6
skal special tegne (f.eks .) også escapes i grupperinger f.eks [\.\*] eller er [.*] ok???
Avatar billede nielle Nybegynder
27. august 2005 - 10:16 #7
Nej, de skal ikke excapes i grupperinger. Dog er der specielle forhold omkring f.eks. tegnene '^' og '-'.
Avatar billede rrm Nybegynder
27. august 2005 - 10:27 #8
ok. Går så ud fra at de skal esacpes
Avatar billede nielle Nybegynder
27. august 2005 - 10:53 #9
Nej de skal heller ikke escapes:

Hvis '^' placeres i starten af grupperingen, betyder den Not:

    [^abc] matcher altså alt som ikke er 'a', 'b' eller 'c'.

Hvis du har brug for at matche tegnet '^' skal det derfor ikke placeres på den første plads:

    [abc^] matcher altså 'a', 'b', 'c' eller '^'.

Hvis '-' placeres midt inde i gruperingen angiver den en range (et interval):

    [a-z] matcher alle tegn mellem 'a' og 'z' - begge inklusive. Hvis man ønsker at matche tegnet '-', skal den derfor placeres på den sidste plads:

    [az-] matcher altså 'a', 'z' eller '-'.
Avatar billede rrm Nybegynder
27. august 2005 - 11:17 #10
tak skal du ha for hjælpen... Ligger du et svar nielle???
Avatar billede nielle Nybegynder
27. august 2005 - 11:36 #11
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
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