Annonce

Indsend nyhed

Del dine opdagelser!

Afstemning

Windows 8?

  • 60%Anvender det ikke
  • 20%Har installeret det, men anvender ikke Modern UI
  • 19%Har installeret det, anvender også Modern UI

RegEx

#1: rackbox

12. jun. 2012 09:13

Jeg her følgende regex:

(https?://)?(www\.)?([a-zA-Z0-9_%\-+!\(\)]*)
\b\.[a-z]{2,4}(\.[a-z]{2})?

Den skulle fange en base URL dog inkl. www og/eller http/s og fungerer fint..

Men når jeg smider den ind i preg_match() i PHP, så virker den ikke. Måske er problemet noget med at skulle escape backslash, eller andet? Jeg kan uanset hvad ikke få den til at virke.

Nogen, der lige har styr på det?

http://www.pbtryk.dk

#2: Emil Melgaard

12. jun. 2012 09:20

Prøv:

preg_match('/(https?://)?(www\.)?([a-zA-Z0-9_%\-+!\
(\)]*)
\b\.[a-z]{2,4}(\.[a-z]{2})?/', $subject)

Altså med single quotes om pattern. Så burde det ikke være nødvendigt at escape backslash.

#3: rackbox

12. jun. 2012 09:31

#2 så må der være noget andet galt... Den fanger ikke webadressen (jeg smider en $matches på som parameter og echoer den med $matches[0]... Den er helt tom med input www.multiform.dk

AltsÅ:

preg_match('/(https?://)?(www\.)?([a-zA-Z0-9_%\-+!\
(\)]*)\b\.[a-z]{2,4}(\.[a-z]{2})?/', 'www.multiform.dk',$matches);
echo $matches[0];

Den virker i regExr

http://www.pbtryk.dk

#4: kasperd

12. jun. 2012 09:39

J(https?://)?(www\.)?([a-zA-Z0-9_%\-+!\(\)]*
)\b\.[a-z]{2,4}(\.[a-z]{2})?rackbox (#1)

Jeg kan få øje på flere problemer med det udtryk:
- Der kan være mange labels i et hostnavn. Du matcher ingen hostnavne med mere end fire labels, og kun hvis de har en meget specifik form.
- Du tillader karakterer i labels som reelt ikke er tilladt i hostnavne.
- Det er lidt uklart om dit \b virker efter hensigten.
- Top level domæner kan være meget længere end fire tegn.

Hvis man vil bruge en heuristik til at matche hostnavne er det nok bedst at bruge en fast liste af alle de gyldige top level domæner. Jeg tror det er sådan Gmail gør, og det virker nogenlunde fornuftigt.

The Internet is full, please try again later.

#5: rackbox

12. jun. 2012 10:13

#4 fair nok - men jeg har egentlig ikke så meget behov for validering - det sker på et andet tidspunkt. Jeg skal bare have en match, der returnerer base URL med www og/eller http(s)

Hvordan ville PHP-koden se ud?

http://www.pbtryk.dk

#6: Emil Melgaard

12. jun. 2012 10:38

Jeg har lige prøvet det selv, og grunden til at du får et tomt array er ikke fordi den ikke matcher, men fordi den kommer med en fejl:

preg_match(): Unknown modifier '/'

Prøv at escape de to "/":

preg_match('/(https?:\/\/)?(www\.)?([a-zA-Z0-9_%\-+
!\(\)]*)\b\.[a-z]{2,4}(\.[a-z]{2})?/', 'www.multiform.dk',$matches);
echo $matches[0];

#7: rackbox

12. jun. 2012 10:58

#6 ser ud til at virke :)

http://www.pbtryk.dk

#8: Ronson

12. jun. 2012 11:23

Det... var så lidt?

Steve Jobs has no public record of giving to charity. As of 2011 Bill Gates has given about 30 billion to charity.

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret bruger