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"; |

