瀏覽代碼

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

朱金辉 2 年之前
父節點
當前提交
a8a079b2df
共有 3 個文件被更改,包括 37 次插入4 次删除
  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 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 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 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 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 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],...
  * @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',
             'required', 'email', 'idcode', 'http',
             'qq', 'postcode', 'ip', 'phone', 'telephone',
             'qq', 'postcode', 'ip', 'phone', 'telephone',
             'mobile', 'en', 'cn', 'account', 'number', 'date',
             'mobile', 'en', 'cn', 'account', 'number', 'date',
-            'safe', 'password', 'maxlength', 'minlength', 'length',
+            'safe', 'password', 'maxlength', 'minlength', 'maxnumber', 'minnumber', 'length',
             'rangeof', 'string', 'sets', 'setsarray', 'float', 'decimal'
             'rangeof', 'string', 'sets', 'setsarray', 'float', 'decimal'
         );
         );
         return in_array($key, $allow);
         return in_array($key, $allow);

+ 11 - 3
src/Driver/TraitDatabase.php

@@ -83,6 +83,14 @@ trait TraitDatabase
         );
         );
 
 
         $rs = $this->setQuery($sql);
         $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()) {
         while ($row = $rs->fetch()) {
             $data['fields'][] = $row['COLUMN_NAME'];
             $data['fields'][] = $row['COLUMN_NAME'];
             if ($row['EXTRA']) {
             if ($row['EXTRA']) {
@@ -100,10 +108,10 @@ trait TraitDatabase
             if (in_array($row['DATA_TYPE'], array('mediumtext', 'TINYTEXT', 'text', 'longtext'))) {
             if (in_array($row['DATA_TYPE'], array('mediumtext', 'TINYTEXT', 'text', 'longtext'))) {
                 $data['rules']['text'][] = $row['COLUMN_NAME'];
                 $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)) {
                 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'];
                     $data['rules']['number'][] = $row['COLUMN_NAME'];
                 }
                 }
             }
             }

+ 23 - 0
src/Library/Validate.php

@@ -83,7 +83,9 @@ class Validate
 		'safe' => '安全字符',
 		'safe' => '安全字符',
 		'password' => '密码',
 		'password' => '密码',
 		'maxlength' => '最大长度',
 		'maxlength' => '最大长度',
+        'maxnumber' => '最大数字',
 		'minlength' => '最小长度',
 		'minlength' => '最小长度',
+        'minnumber' => '最小数字',
 		'length' => '固定长度',
 		'length' => '固定长度',
 		'rangeof' => '范围',
 		'rangeof' => '范围',
 		'string' => '字符',
 		'string' => '字符',
@@ -412,6 +414,27 @@ class Validate
 		return ValidateLength($str) <= $len;
 		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;
+    }
 	/**
 	/**
 	 * 最小长度
 	 * 最小长度
 	 *
 	 *