Avatar billede tipsen Nybegynder
26. juli 2003 - 19:27 Der er 16 kommentarer og
2 løsninger

Svag reg-exp til url-check

Hej eksperter

Jeg skal bruge en regulær expression der laver et "svagt" check af en URL. Med "svagt" mener jeg, at den regulære expression under ingen omstændigheder må forkaste en korrekt URL - den må hellere tillade en forkert URL!

Dvs. jeg skal bruge en regulær expression der sørger for at fange de mest oplagte fejl i en url. Det skal benyttes til at en bruger af systemet kan fodre et link-system med nye links, men bliver gjort opmærksom på fejl, hvis det indtastede under ingen omstændigheder kan være en URL.

Mvh

tipsen
Avatar billede tipsen Nybegynder
26. juli 2003 - 19:28 #1
NB: Typen af den regulære expression skal matche eksempelvis '/^-?[1-9][0-9]*/' - jeg kan ikke huske hvilken "stil" det er...
Avatar billede erikjacobsen Ekspert
26. juli 2003 - 19:46 #2
Mindste lovlige url er vel n.dk - så check for mindst et bogstav på hver side
af et punktum. Bare et forslag ;)
Avatar billede erikjacobsen Ekspert
26. juli 2003 - 19:47 #3
Ups nej. 1.dk er både lovlig og eksisterer...
Avatar billede tipsen Nybegynder
26. juli 2003 - 20:57 #4
Det må egentlig gerne være et krav, at url'en starter "rigtigt" med http://, https://, ftp:// og hvad der ellers kan være af muligheder jeg ikke har overvejet.

-hvis dette er dumt, så forklar hvorfor!

-derudover vil jeg meget gerne se den konkrete regulære expression, da jeg er virkelig dårlig på dette område.
Avatar billede erikjacobsen Ekspert
26. juli 2003 - 22:15 #5
det kan være der er nogen der kommer til det ...

Men hvis jeg taster en URL ind er det sjældent med http:// og lignende foran.
Avatar billede schaefner Juniormester
26. juli 2003 - 22:18 #6
Kan/må der være undermapper i adressen. Altså http://domain.dk/hej/ ?
Avatar billede tipsen Nybegynder
26. juli 2003 - 22:49 #7
schaefner: ja - det må der gerne.
Avatar billede sostack Nybegynder
28. juli 2003 - 08:50 #8
Prøv med:
<?php
function linkcheck($urllen)
{
//godkender "file://", "ftp://", "http://", "https://", "ldap://"
if(ereg("^(ldap|http|https|ftp)+://(([a-z0-9]|\-)+\.)+([a-z]{2,6}|([a-z/]+[a-z/]{2,6}))$", $urllen))
{
    echo "OK!";
} else {
    echo "Ikke OK!";
}
}
linkcheck("https://1.de/test/test/");
?>

//sostack
Avatar billede avminarm Juniormester
28. juli 2003 - 10:06 #9
eller noget i dennestil:

  $value = "http://www.eksempel.dk";
  $pattern = "^(http|ftp)://(www\.)?.+\.(dk|com|net|org)$"; 
  if(ereg($pattern, $value)){
    return true;
  } else {
    retun false;
  }
Avatar billede tipsen Nybegynder
28. juli 2003 - 10:18 #10
sostack: Din udgave skulle acceptere "file://" - hvordan!? Ellers ser den fornuftig ud (uden at have testet den) - ikke super restriktiv, men den lader heller ikke det rene skrammel komme igennem!

avminarm: Så vidt jeg kan forstå, er din udgave meget restriktiv - er det korrekt?
Avatar billede sostack Nybegynder
28. juli 2003 - 10:51 #11
if(ereg("^(file|ldap|http|https|ftp)+://(([a-z0-9]|\-)+\.)+([a-z]{2,6}|([a-z/]+[a-z/]{2,6}))$", $urllen))

//sostack
Avatar billede avminarm Juniormester
28. juli 2003 - 11:29 #12
jo - my bad havde ikke læst dit sprg helt korrekt (til ende ;o]), men hvis nu man skifter http|ftp ud med [a-zA-Z0-9] mv. og det samme med dk|com|net|org - så nærmer den sig måske (måske endda lidt for løs) ;o)
Avatar billede tipsen Nybegynder
03. august 2003 - 10:47 #13
Nu har jeg prøvet, men det tilter lidt - ved ikke om den regulære expression er i forkert format?

Her er eksempler på hvad jeg har i forvejen - og de fungerer:

'email'        =>array('regex', '/^[a-zA-Z0-9\._-]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/'),
'emailorblank'  =>array('regex', '/(^$)|(^[a-zA-Z0-9\._-]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$)/'),
'lettersonly'  =>array('regex', '/^[a-zA-Z]+$/'),
'alphanumeric'  =>array('regex', '/^[a-zA-Z0-9]+$/'),

Her er den nye:

'url-          =>array('regex', '/^(file|ldap|http|https|ftp)+://(([a-z0-9]|\-)+\.)+([a-z]{2,6}|([a-z/]+[a-z/]{2,6}))$/')

Det er en del af "reglerne" i HTML_QuickForm fra PEAR - man kan tilføje sine egne regler, men de skal selvfølgelig være i samme format som de øvrige...

Nogle bud på, hvad der kan være galt?
Avatar billede tipsen Nybegynder
03. august 2003 - 11:40 #14
Jeg kan fortælle, at disse "regler" bliver oversat til javascript funktioner, hvor der client-side bliver checket om input i formularen overholder reglerne - desværre giver ovenstående regexp en javascript fejl med en "ulovlig karakter" når det afvikles i IE!
Avatar billede tipsen Nybegynder
03. august 2003 - 11:45 #15
Der hvor det tilsyneladende kikser er ved denne stump: (([a-z0-9]|\-)+\.)
Avatar billede tipsen Nybegynder
03. august 2003 - 11:55 #16
Så vidt jeg kan regne udfra syntaxen af de øvrige, skal det være PCRE-format?
Avatar billede tipsen Nybegynder
11. juli 2004 - 11:07 #17
lukker - avminarm; du får lidt for indsatsen.
Avatar billede bumle90 Nybegynder
20. juli 2004 - 22:20 #18
Er der en af jer der kan hjælpe mig med html_quickform?
Jeg skal nok gi points
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