Bladeren bron

Update: 更新验证规则+验证方法

朱金辉 2 jaren geleden
bovenliggende
commit
a8a079b2df
3 gewijzigde bestanden met toevoegingen van 37 en 4 verwijderingen
  1. 3 1
      src/Base/Rules.php
  2. 11 3
      src/Driver/TraitDatabase.php
  3. 23 0
      src/Library/Validate.php

+ 3 - 1
src/Base/Rules.php

@@ -26,6 +26,8 @@ use Qii\Execptions;
  * @method bool addPasswordFields(array $data = [string, string, bool|string|int], array $data=[...])  [string $field string $msg string $extparam],...
  * @method bool addMaxLengthFields(array $data = [string, string, bool|string|int], array $data=[...])  [string $field string $msg string $extparam],...
  * @method bool addMinLengthFields(array $data = [string, string, bool|string|int], array $data=[...])  [string $field string $msg string $extparam],...
+ * @method bool addMaxNumberFields(array $data = [string, string, bool|string|int], array $data=[...])  [string $field string $msg string $extparam],...
+ * @method bool addMinNumberFields(array $data = [string, string, bool|string|int], array $data=[...])  [string $field string $msg string $extparam],...
  * @method bool addLengthFields(array $data = [string, string, bool|string|int], array $data=[...])  [string $field string $msg string $extparam],...
  * @method bool addRangeofFields(array $data = [string, string, bool|string|int], array $data=[...])  [string $field string $msg string $extparam],...
  * @method bool addStringFields(array $data = [string, string, bool|string|int], array $data=[...])  [string $field string $msg string $extparam],...
@@ -460,7 +462,7 @@ class Rules
             'required', 'email', 'idcode', 'http',
             'qq', 'postcode', 'ip', 'phone', 'telephone',
             'mobile', 'en', 'cn', 'account', 'number', 'date',
-            'safe', 'password', 'maxlength', 'minlength', 'length',
+            'safe', 'password', 'maxlength', 'minlength', 'maxnumber', 'minnumber', 'length',
             'rangeof', 'string', 'sets', 'setsarray', 'float', 'decimal'
         );
         return in_array($key, $allow);

+ 11 - 3
src/Driver/TraitDatabase.php

@@ -83,6 +83,14 @@ trait TraitDatabase
         );
 
         $rs = $this->setQuery($sql);
+        $maxRange = [
+            'bigint' => [-1 * pow(2, 63), pow(2, 63)-1],
+            'int' => [-1 * pow(2, 31), pow(2, 31)-1],
+            'mediumint' => [-8388608, 8388607],
+            'smallint' => [-1 * pow(2, 15), pow(2, 15)-1],
+            'tinyint' => [-128, 127],
+            'integer' => [-1 * pow(2, 31), pow(2, 31)-1]
+        ];
         while ($row = $rs->fetch()) {
             $data['fields'][] = $row['COLUMN_NAME'];
             if ($row['EXTRA']) {
@@ -100,10 +108,10 @@ trait TraitDatabase
             if (in_array($row['DATA_TYPE'], array('mediumtext', 'TINYTEXT', 'text', 'longtext'))) {
                 $data['rules']['text'][] = $row['COLUMN_NAME'];
             }
-            if (in_array($row['DATA_TYPE'], array('bigint', 'int', 'smallint', 'tinyint', 'integer'))) {
-                preg_match('/[\d]{1,}/', $row['COLUMN_TYPE'], $matches);
+            if (in_array($row['DATA_TYPE'], array('bigint', 'int', 'mediumint', 'smallint', 'tinyint', 'integer'))) {
+                preg_match('/[\d]{0,}/', $row['COLUMN_TYPE'], $matches);
                 if(!empty($matches)) {
-                    $data['rules']['int'][$row['COLUMN_NAME']] = $matches[0];
+                    $data['rules']['int'][$row['COLUMN_NAME']] = isset($matches[0]) && $matches[0] ? $matches[0] : $maxRange[$row['DATA_TYPE']];
                     $data['rules']['number'][] = $row['COLUMN_NAME'];
                 }
             }

+ 23 - 0
src/Library/Validate.php

@@ -83,7 +83,9 @@ class Validate
 		'safe' => '安全字符',
 		'password' => '密码',
 		'maxlength' => '最大长度',
+        'maxnumber' => '最大数字',
 		'minlength' => '最小长度',
+        'minnumber' => '最小数字',
 		'length' => '固定长度',
 		'rangeof' => '范围',
 		'string' => '字符',
@@ -412,6 +414,27 @@ class Validate
 		return ValidateLength($str) <= $len;
 	}
 
+    /**
+     * 最大数字大小
+     *
+     * @param int $number 需要比较的数字
+     * @param int $maxnumber 最大数字
+     * @return bool
+     */
+    public function maxnumber($number, $maxnumber) {
+        return $number <= $maxnumber;
+    }
+
+    /**
+     * 最小数字大小
+     *
+     * @param int $number 需要比较的数字
+     * @param int $minnumber 最小数字
+     * @return bool
+     */
+    public function minnumber($number, $minnumber) {
+        return $number >= $minnumber;
+    }
 	/**
 	 * 最小长度
 	 *