Versio

Regex valid url

Overzicht Reageren

Paul K

Paul K

18/07/2008 11:44:00
Quote Anchor link
Hey mensen,

Ik kom er niet echt uit.
Hoe preg_match ik nu of een link een echte url is ja of nee
 
PHP hulp

PHP hulp

25/05/2012 14:22:58
Gesponsorde koppelingen:
 
Emmanuel Delay

Emmanuel Delay

18/07/2008 11:56:00
Quote Anchor link
hier: http://be.php.net/preg_match vond ik dit; juist 2 x print_r bij gezet, zodat je ziet wat er gebeurt.

Je zou ook nog een lijst kunnen maken van .be, .nl, .com, ... en daarop controleren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
    "http://www.php.net/index.html", $matches);
$host = $matches[1];

print_r($matches);

// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "<br />domain name is: {$matches[0]}\n<br />";

print_r($matches);
?>
 
Marcel

Marcel

18/07/2008 11:58:00
Quote Anchor link
Voordat je een echte reguliere expressie gaat schrijven moet je bedenken waaraan jij vindt dat een URL voldoet.

Daarna maak je een stukje simpele code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    // Zorg ervoor dat de URL in de variabele komt
    $sUrl = 'http://www.phphulp.nl/forum/showtopic.php?cat=1&id=51231';
    
    // Zet hier je reguliere expressie
    $sExpressie = '##';
    
    if ( preg_match ( $sExpressie , $sUrl ) )
    {

        // Valid
    }
    else
    {
        // Niet valid
    }
?>


Ik zou zeggen dat een link moet voldoen aan:
Een protocol
dubbele punt slash slash
dan eventueel letters streepjes en punten
dan verplicht minstens twee letters of streepjes, dan een punt, en dan verplicht een extensie
daarna mag er alles achter staan (als je wil kan je controleren of het URL-ge-encodeerd is)
 
Paul K

Paul K

18/07/2008 11:59:00
Quote Anchor link
Dat is enkel hostname, en zo te zien ook alleen voor http
ik wil gewoon via preg_match weten of een een echte link is dus
http of https :// evt www. [hostname] . [ext] / [rest rommel]
 
Martijn B

Martijn B

18/07/2008 12:04:00
Quote Anchor link
Misschien heb je hier iets aan:

http://www.phphulp.nl/php/scripts/2/824/
 
Paul K

Paul K

18/07/2008 12:12:00
Quote Anchor link
ik heb zelf wat zitten knutselen kom ik hieropuit:
"/^(http:\/\/|https:\/\/)(www.)?([A-Za-z0-9_-]+)\.([A-Za-z][A-Za-z][A-Za-z])/
Het schijnt te werken :)
 
Martijn B

Martijn B

18/07/2008 12:25:00
Quote Anchor link
Deze is misschien iets beter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
error_reporting(E_ALL | E_STRICT);

$aTest = array(    'www.foo.bar',
                'http://www.fo-o1.foo2.foo.bar',
                'https://www.foo.bar/foo/bar/',
                'www.foo.bar?foo=bar&bar=%434&amp;');

foreach( $aTest as $k => $v )
{

    if( preg_match('#^(https?://|www.){1,2}[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,3}(/[a-z0-9_-]+)*/?\??[\W\w]*$#i', $v) )
    {

        echo $k, ' GOED<br />',  PHP_EOL;
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Bart Tuma

Bart Tuma

18/07/2008 13:10:00
Quote Anchor link
Misschien handig te info:

er bestaan ook domeinen met als eind: .nl.tt ofzo, houd hier wel rekening mee...maar dit komt nog zelden voor...
 



Overzicht Reageren