Skip to content

Commit 4ccfd63

Browse files
committed
new add more validators: date* file image ã� ...
1 parent dd5e046 commit 4ccfd63

File tree

8 files changed

+444
-237
lines changed

8 files changed

+444
-237
lines changed

README.md

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -554,8 +554,9 @@ public function get(string $key, $default = null)
554554
`float` | 过滤非法字符,保留`float`格式的数据 | `['price', 'float', 'filter' => 'float'],`
555555
`string` | 过滤非法字符并转换为`string`类型 | `['userId', 'number', 'filter' => 'string'],`
556556
`trim` | 去除首尾空白字符,支持数组。 | `['username', 'min', 4, 'filter' => 'trim'],`
557-
`lowercase` | 字符转换为小写 | `['description', 'min', 4, 'filter' => 'lowercase'],`
558-
`uppercase` | 字符转换为大写 | `['title', 'min', 4, 'filter' => 'uppercase'],`
557+
`lowercase` | 字符串转换为小写 | `['description', 'min', 4, 'filter' => 'lowercase'],`
558+
`uppercase` | 字符串转换为大写 | `['title', 'min', 4, 'filter' => 'uppercase'],`
559+
`strToTime` | 字符串日期转换时间戳 | `['pulishedAt', 'number', 'filter' => 'strToTime'],`
559560
`abs` | 返回绝对值 | `['field', 'int', 'filter' => 'abs'],`
560561
`url` | URL 过滤,移除所有不符合 URL 的字符 | `['field', 'url', 'filter' => 'url'],`
561562
`email` | email 过滤,移除所有不符合 email 的字符 | `['field', 'email', 'filter' => 'email'],`
@@ -602,10 +603,20 @@ public function get(string $key, $default = null)
602603
`requiredWithoutAll` | 如果所有指定的字段 都没有 值,则此字段为 **必填** | `['city', 'requiredWithoutAll', ['myCity', 'myCity1'] ]`
603604
`date` | 验证是否是 date | `['publishedAt', 'date']`
604605
`dateFormat` | 验证是否是 date, 并且是指定的格式 | `['publishedAt', 'dateFormat', 'Y-m-d']`
606+
`dateEquals` | 验证是否是 date, 并且是否是等于给定日期 | `['publishedAt', 'dateEquals', '2017-05-12']`
607+
`beforeDate` | 验证字段值必须是给定日期之前的值 | `['publishedAt', 'beforeDate', '2017-05-12']`
608+
`beforeOrEqualDate` | 字段值必须是小于或等于给定日期的值 | `['publishedAt', 'beforeOrEqualDate', '2017-05-12']`
609+
`afterOrEqualDate` | 字段值必须是大于或等于给定日期的值 | `['publishedAt', 'afterOrEqualDate', '2017-05-12']`
610+
`afterDate` | 验证字段值必须是给定日期之前的值 | `['publishedAt', 'afterDate', '2017-05-12']`
605611
`json` | 验证是否是json字符串 | `['goods', 'json']`
612+
`file` | 验证是否是上传的文件 | `['upFile', 'file']`
613+
`image` | 验证是否是上传的图片文件 | `['avatar', 'image']`, 限定后缀名 `['avatar', 'image', 'jpg,png']`
606614
`ip` | 验证是否是 IP | `['ipAddr', 'ip']`
607615
`ipv4` | 验证是否是 IPv4 | `['ipAddr', 'ipv4']`
608616
`ipv6` | 验证是否是 IPv6 | `['ipAddr', 'ipv6']`
617+
`md5` | 验证是否是 md5 格式的字符串 | `['passwd', 'md5']`
618+
`sha1` | 验证是否是 sha1 格式的字符串 | `['passwd', 'sha1']`
619+
`color` | 验证是否是html color | `['backgroundColor', 'color']`
609620
`regexp` | 使用正则进行验证 | `['name', 'regexp', '/^\w+$/']`
610621
`safe` | 用于标记字段是安全的,无需验证 | `['createdAt, updatedAt', 'safe']`
611622

@@ -619,6 +630,21 @@ public function get(string $key, $default = null)
619630
['createdAt, updatedAt', 'safe']
620631
```
621632

633+
### 关于文件验证
634+
635+
文件验证时注意要设置文件信息源数据
636+
637+
```php
638+
$v = Validation::make($_POST, [
639+
// [...],
640+
// some rules ...
641+
])
642+
->setUploadedFiles($_FILES)
643+
->validate();
644+
645+
// ...
646+
```
647+
622648
### 一些补充说明
623649

624650
- **请将 `required*` 系列规则写在规则列表的最前面**

src/Filter/FilterList.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,17 @@ public static function abs($var)
5353
* FILTER_FLAG_ALLOW_SCIENTIFIC - 允许科学记数法(比如 e 和 E)
5454
* @return mixed
5555
*/
56-
public static function float($var, $flags = 0)
56+
public static function float($var, $flags = FILTER_FLAG_ALLOW_FRACTION)
5757
{
5858
$settings = [];
5959

6060
if ((int)$flags !== 0) {
6161
$settings['flags'] = (int)$flags;
6262
}
6363

64-
return filter_var($var, FILTER_SANITIZE_NUMBER_FLOAT, $settings);
64+
$ret = filter_var($var, FILTER_SANITIZE_NUMBER_FLOAT, $settings);
65+
66+
return strpos($ret, '.') ? (float)$ret : $ret;
6567
}
6668

6769
/**
@@ -115,7 +117,7 @@ public static function trim($var)
115117
*/
116118
public static function lowercase($var)
117119
{
118-
if (!\is_string($var)) {
120+
if (!$var || !\is_string($var)) {
119121
return \is_numeric($var) ? $var : '';
120122
}
121123

@@ -129,13 +131,27 @@ public static function lowercase($var)
129131
*/
130132
public static function uppercase($var)
131133
{
132-
if (!\is_string($var)) {
134+
if (!$var || !\is_string($var)) {
133135
return \is_numeric($var) ? $var : '';
134136
}
135137

136138
return Helper::strToUpper($var);
137139
}
138140

141+
/**
142+
* string to time
143+
* @param string $var
144+
* @return int
145+
*/
146+
public static function strToTime($var)
147+
{
148+
if (!$var || !\is_string($var)) {
149+
return 0;
150+
}
151+
152+
return (int)strtotime($var);
153+
}
154+
139155
/**
140156
* 去除 URL 编码不需要的字符。
141157
* @note 与 urlencode() 函数很类似。

src/Utils/ErrorMessageTrait.php

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ trait ErrorMessageTrait
2929
'url' => '{attr} is not a url address!',
3030
'email' => '{attr} is not a email address!',
3131
'date' => '{attr} is not a date format!',
32-
'dateFormat' => '{attr} is not in a {value0} date format !',
32+
'dateFormat' => '{attr} is not in a {value0} date format!',
3333
'ip' => '{attr} is not IP address!',
3434
'ipv4' => '{attr} is not a IPv4 address!',
3535
'ipv6' => '{attr} is not a IPv6 address!',
@@ -78,6 +78,10 @@ trait ErrorMessageTrait
7878
'strList' => '{attr} must be an array and value is all strings',
7979

8080
'json' => '{attr} must be an json string',
81+
82+
'file' => '{attr} must be an uploaded file',
83+
'image' => '{attr} must be an uploaded image file',
84+
8185
'callback' => '{attr} don\'t pass the test and verify!',
8286
'_' => '{attr} validation is not through!',
8387
];
@@ -371,27 +375,6 @@ public function getTranslate(string $attr): string
371375
return $trans[$attr] ?? Helper::toSnakeCase($attr, ' ');
372376
}
373377

374-
/**
375-
* @deprecated please use getTranslate() instead.
376-
* @param string $attr
377-
* @return string
378-
*/
379-
public function getAttrTran(string $attr): string
380-
{
381-
$trans = $this->getAttrTrans();
382-
383-
return $trans[$attr] ?? Helper::toSnakeCase($attr, ' ');
384-
}
385-
386-
/**
387-
* @deprecated please use getTranslates() instead.
388-
* @return array
389-
*/
390-
public function getAttrTrans(): array
391-
{
392-
return array_merge($this->attrTrans(), $this->_translates);
393-
}
394-
395378
/**
396379
* set the attrs translation data
397380
* @deprecated please use setTranslates() instead.

src/Utils/Helper.php

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,75 @@
1111
*/
1212
class Helper
1313
{
14+
/**
15+
* known image mime types
16+
* @link https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
17+
*/
18+
const IMG_MIME_TYPES = [
19+
'bmp' => 'image/bmp',
20+
'gif' => 'image/gif',
21+
'ief' => 'image/ief',
22+
'jpeg' => 'image/jpeg',
23+
'jpg' => 'image/jpeg',
24+
'jpe' => 'image/jpeg',
25+
'png' => 'image/png',
26+
'svg' => 'image/svg+xml',
27+
'ico' => 'image/x-icon',
28+
];
29+
30+
const IMG_MIME_CONSTANTS = [
31+
IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_BMP, IMAGETYPE_WBMP, IMAGETYPE_ICO
32+
];
33+
34+
/**
35+
* @param string $ext
36+
* @return mixed|null
37+
*/
38+
public static function getImageMime($ext)
39+
{
40+
return self::IMG_MIME_TYPES[$ext] ?? null;
41+
}
42+
43+
/**
44+
* @param string $mime
45+
* @return mixed|null
46+
*/
47+
public static function getImageExtByMime($mime)
48+
{
49+
$key = array_search($mime, self::IMG_MIME_TYPES, true);
50+
51+
return false !== $key ? self::IMG_MIME_TYPES[$key] : null;
52+
}
53+
54+
/**
55+
* @param string $file
56+
* @return string eg: 'image/gif'
57+
*/
58+
public static function getMimeType($file)
59+
{
60+
// return mime_content_type($file);
61+
return finfo_file(finfo_open(FILEINFO_MIME_TYPE), $file);
62+
}
63+
64+
/**
65+
* @param $string
66+
* @param string $delimiter
67+
* @param bool $filterEmpty
68+
* @return array
69+
*/
70+
public static function explode($string, $delimiter = ',', $filterEmpty = true)
71+
{
72+
$string = trim($string, $delimiter);
73+
74+
if (!strpos($string, $delimiter)) {
75+
return [$string];
76+
}
77+
78+
$list = array_map('trim', explode($delimiter, $string));
79+
80+
return $filterEmpty ? array_filter($list) : $list;
81+
}
82+
1483
/**
1584
* @param string $str
1685
* @param string $encoding

0 commit comments

Comments
 (0)