1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* Functions about validate some data. |
4
|
|
|
* @package fwolflib |
5
|
|
|
* @subpackage func |
6
|
|
|
* @copyright Copyright 2006-2010, Fwolf |
7
|
|
|
* @author Fwolf <[email protected]> |
8
|
|
|
* @since 2006-07-09 |
9
|
|
|
*/ |
10
|
|
|
|
11
|
|
|
|
12
|
|
|
require_once(dirname(__FILE__) . '/../fwolflib.php'); |
13
|
|
|
require_once(FWOLFLIB . 'func/env.php'); |
14
|
|
|
|
15
|
|
|
|
16
|
|
|
/** |
17
|
|
|
* Validate an email address. |
18
|
|
|
* |
19
|
|
|
* Provide email address (raw input) |
20
|
|
|
* Returns true if the email address has the email |
21
|
|
|
* address format and the domain exists. |
22
|
|
|
* |
23
|
|
|
* @deprecated Use Fwlib\Validator\Constraint\Email |
24
|
|
|
* @link http://www.linuxjournal.com/article/9585 |
25
|
|
|
* @param string $email |
26
|
|
|
* @return boolean |
27
|
|
|
*/ |
28
|
|
|
function ValidateEmail($email) |
29
|
|
|
{ |
30
|
|
|
$is_valid = true; |
31
|
|
|
$at_index = strrpos($email, '@'); |
32
|
|
|
if (is_bool($at_index) && !$at_index) |
33
|
|
|
{ |
34
|
|
|
$is_valid = false; |
35
|
|
|
} |
36
|
|
|
else |
37
|
|
|
{ |
38
|
|
|
$domain = substr($email, $at_index + 1); |
39
|
|
|
$local = substr($email, 0, $at_index); |
40
|
|
|
$local_len = strlen($local); |
41
|
|
|
$domain_len = strlen($domain); |
42
|
|
|
if ($local_len < 1 || $local_len > 64) |
43
|
|
|
{ |
44
|
|
|
// local part length exceeded |
45
|
|
|
$is_valid = false; |
46
|
|
|
} |
47
|
|
|
elseif ($domain_len < 1 || $domain_len > 255) |
48
|
|
|
{ |
49
|
|
|
// domain part length exceeded |
50
|
|
|
$is_valid = false; |
51
|
|
|
} |
52
|
|
|
elseif ($local[0] == '.' || $local[$local_len-1] == '.') |
53
|
|
|
{ |
54
|
|
|
// local part starts or ends with '.' |
55
|
|
|
$is_valid = false; |
56
|
|
|
} |
57
|
|
|
elseif (preg_match('/\\.\\./', $local)) |
58
|
|
|
{ |
59
|
|
|
// local part has two consecutive dots |
60
|
|
|
$is_valid = false; |
61
|
|
|
} |
62
|
|
|
elseif (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) |
63
|
|
|
{ |
64
|
|
|
// character not valid in domain part |
65
|
|
|
$is_valid = false; |
66
|
|
|
} |
67
|
|
|
elseif (preg_match('/\\.\\./', $domain)) |
68
|
|
|
{ |
69
|
|
|
// domain part has two consecutive dots |
70
|
|
|
$is_valid = false; |
71
|
|
|
} |
72
|
|
View Code Duplication |
elseif (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', |
73
|
|
|
str_replace("\\\\", "", $local))) |
74
|
|
|
{ |
75
|
|
|
// character not valid in local part unless |
76
|
|
|
// local part is quoted |
77
|
|
|
if (!preg_match('/^"(\\\\"|[^"])+"$/', |
78
|
|
|
str_replace("\\\\", "", $local))) |
79
|
|
|
{ |
80
|
|
|
$is_valid = false; |
81
|
|
|
} |
82
|
|
|
} |
83
|
|
|
|
84
|
|
|
// :NOTICE: Some network provider will return fake A record if |
85
|
|
|
// a dns query return fail, usually disp some ads. |
86
|
|
|
// So we only check MX record. |
87
|
|
|
if ($is_valid && NixOs()) |
88
|
|
|
if (false == checkdnsrr($domain, "MX")) |
|
|
|
|
89
|
|
|
$is_valid = false; |
90
|
|
|
} |
91
|
|
|
return $is_valid; |
92
|
|
|
} |
93
|
|
|
|
94
|
|
|
|
95
|
|
|
/** |
96
|
|
|
* If a string is valid ip address. |
97
|
|
|
* |
98
|
|
|
* @deprecated Use Fwlib\Util\Validator::ipv4() |
99
|
|
|
* @param string $ip |
100
|
|
|
* @return boolean |
101
|
|
|
*/ |
102
|
|
View Code Duplication |
function ValidateIp($ip) |
103
|
|
|
{ |
104
|
|
|
if (!strcmp(long2ip(sprintf("%u", ip2long($ip))), $ip)) |
105
|
|
|
return true; |
106
|
|
|
else |
107
|
|
|
return false; |
108
|
|
|
} // end of function ValidateIp |
109
|
|
|
|
110
|
|
|
|
111
|
|
|
/** |
112
|
|
|
* 老版本的检查ip函数, obsolete, leave here as reference. |
113
|
|
|
* @param $str string |
114
|
|
|
* @return boolean |
115
|
|
|
*/ |
116
|
|
|
function ValidateIpOld($str) |
117
|
|
|
{ |
118
|
|
|
$ip = explode(".", $str); |
119
|
|
|
if (count($ip)<4 || count($ip)>4) return false; |
120
|
|
|
foreach($ip as $ip_addr) { |
121
|
|
|
if ( !is_numeric($ip_addr) ) return false; |
122
|
|
|
if ( $ip_addr<0 || $ip_addr>255 ) return false; |
123
|
|
|
} |
124
|
|
|
return true; |
125
|
|
|
} // end of function ValidateIpOld |
126
|
|
|
|
127
|
|
|
//如果简单的判断格式a.b.c.d而不考虑abcd的值的话: |
128
|
|
|
//return (preg_match("/^([0-9]{1,3}\.){3}[0-9]{1,3}$/is", $str)); |
129
|
|
|
//不过如果需要真的ip的时候就不好玩了 |
130
|
|
|
?> |
131
|
|
|
|
When comparing two booleans, it is generally considered safer to use the strict comparison operator.