Regex valid url
Hey mensen,
Ik kom er niet echt uit.
Hoe preg_match ik nu of een link een echte url is ja of nee
Ik kom er niet echt uit.
Hoe preg_match ik nu of een link een echte url is ja of nee
Gesponsorde koppelingen:
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.
Je zou ook nog een lijst kunnen maken van .be, .nl, .com, ... en daarop controleren.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
?>
// 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);
?>
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:
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)
Daarna maak je een stukje simpele code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
}
?>
// 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)
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]
ik wil gewoon via preg_match weten of een een echte link is dus
http of https :// evt www. [hostname] . [ext] / [rest rommel]
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 :)
"/^(http:\/\/|https:\/\/)(www.)?([A-Za-z0-9_-]+)\.([A-Za-z][A-Za-z][A-Za-z])/
Het schijnt te werken :)
Deze is misschien iets beter:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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&');
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;
}
}
?>
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&');
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
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...
er bestaan ook domeinen met als eind: .nl.tt ofzo, houd hier wel rekening mee...maar dit komt nog zelden voor...



