phpBB
Statistics
| Revision:

root / trunk / phpBB / develop / regex.php

History | View | Annotate | Download (2.5 kB)

1 6774 naderman
<?php
2 7288 acydburn
//
3 7288 acydburn
// Security message:
4 7288 acydburn
//
5 7288 acydburn
// This script is potentially dangerous.
6 7288 acydburn
// Remove or comment the next line (die(".... ) to enable this script.
7 7288 acydburn
// Do NOT FORGET to either remove this script or disable it after you have used it.
8 7288 acydburn
//
9 7288 acydburn
die("Please read the first lines of this script for instructions on how to enable it");
10 6774 naderman
11 7288 acydburn
12 6774 naderman
// IP regular expressions
13 6774 naderman
14 6774 naderman
$dec_octet = '(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])';
15 6774 naderman
$h16 = '[\dA-F]{1,4}';
16 6774 naderman
$ipv4 = "(?:$dec_octet\.){3}$dec_octet";
17 6774 naderman
$ls32 = "(?:$h16:$h16|$ipv4)";
18 6774 naderman
19 6774 naderman
$ipv6_construct = array(
20 6774 naderman
        array(false,        '',                '{6}',        $ls32),
21 10637 git-gate
        array(false,        '::',        '{0,5}', "(?:$h16(?::$h16)?|$ipv4)"),
22 6774 naderman
        array('',                ':',        '{4}',        $ls32),
23 6774 naderman
        array('{1,2}',        ':',        '{3}',        $ls32),
24 6774 naderman
        array('{1,3}',        ':',        '{2}',        $ls32),
25 6774 naderman
        array('{1,4}',        ':',        '',                $ls32),
26 6774 naderman
        array('{1,5}',        ':',        false,        $ls32),
27 6774 naderman
        array('{1,6}',        ':',        false,        $h16),
28 10637 git-gate
        array('{1,7}',        ':',        false,        ''),
29 10637 git-gate
        array(false, '::', false, '')
30 6774 naderman
);
31 6774 naderman
32 6774 naderman
$ipv6 = '(?:';
33 6774 naderman
foreach ($ipv6_construct as $ip_type)
34 6774 naderman
{
35 6774 naderman
        $ipv6 .= '(?:';
36 6774 naderman
        if ($ip_type[0] !== false)
37 6774 naderman
        {
38 6774 naderman
                $ipv6 .= "(?:$h16:)" . $ip_type[0];
39 6774 naderman
        }
40 6774 naderman
        $ipv6 .= $ip_type[1];
41 6774 naderman
        if ($ip_type[2] !== false)
42 6774 naderman
        {
43 6774 naderman
                $ipv6 .= "(?:$h16:)" . $ip_type[2];
44 6774 naderman
        }
45 6774 naderman
        $ipv6 .= $ip_type[3] . ')|';
46 6774 naderman
}
47 6774 naderman
$ipv6 = substr($ipv6, 0, -1) . ')';
48 6774 naderman
49 6774 naderman
echo 'IPv4: ' . $ipv4 . "<br />\nIPv6: " . $ipv6 . "<br />\n";
50 6774 naderman
51 6774 naderman
// URL regular expressions
52 6774 naderman
53 6774 naderman
$pct_encoded = "%[\dA-F]{2}";
54 6774 naderman
$unreserved = 'a-z0-9\-._~';
55 6774 naderman
$sub_delims = '!$&\'()*+,;=';
56 6794 davidmj
$pchar = "(?:[$unreserved$sub_delims:@|]+|$pct_encoded)"; // rfc: no "|"
57 6774 naderman
58 6774 naderman
$scheme = '[a-z][a-z\d+\-.]*';
59 7428 naderman
$reg_name = "(?:[$unreserved$sub_delims:@|]+|$pct_encoded)+"; // rfc: * instead of + and no "|" and no "@" and no ":" (included instead of userinfo)
60 6832 naderman
//$userinfo = "(?:(?:[$unreserved$sub_delims:]+|$pct_encoded))*";
61 6774 naderman
$ipv4_simple = '[0-9.]+';
62 6886 naderman
$ipv6_simple = '\[[a-z0-9.]+:[a-z0-9.]+:[a-z0-9.:]+\]';
63 6774 naderman
$host = "(?:$reg_name|$ipv4_simple|$ipv6_simple)";
64 6774 naderman
$port = '\d*';
65 6832 naderman
//$authority = "(?:$userinfo@)?$host(?::$port)?";
66 6832 naderman
$authority = "$host(?::$port)?";
67 6774 naderman
$segment = "$pchar*";
68 6774 naderman
$path_abempty = "(?:/$segment)*";
69 6774 naderman
$hier_part = "/{2}$authority$path_abempty";
70 6794 davidmj
$query = "(?:[$unreserved$sub_delims:@/?|]+|$pct_encoded)*"; // pchar | "/" | "?", rfc: no "|"
71 6774 naderman
$fragment = $query;
72 6774 naderman
73 6774 naderman
$url =  "$scheme:$hier_part(?:\?$query)?(?:\#$fragment)?";
74 6774 naderman
echo 'URL: ' . $url . "<br />\n";
75 6774 naderman
76 6774 naderman
// no scheme, shortened authority, but host has to start with www.
77 6774 naderman
$www_url =  "www\.$reg_name(?::$port)?$path_abempty(?:\?$query)?(?:\#$fragment)?";
78 6774 naderman
echo 'www.URL: ' . $www_url . "<br />\n";
79 6774 naderman
80 6774 naderman
// no schema and no authority
81 6774 naderman
$relative_url = "$segment$path_abempty(?:\?$query)?(?:\#$fragment)?";
82 6774 naderman
echo 'relative URL: ' . $relative_url . "<br />\n";