コード例 #1
0
ファイル: Validate.php プロジェクト: kevinwan/xf
 /**
  * 验证表单 分析规则 Validate
  * @access private
  * @param array $data 将要验证的数组资料
  * @param string $key	当前需要验证的字段[key]
  * @param string $rules_name	规则名称
  * @param mixed $rules_value	规则值
  * @param array	 $message	自定义错误信息
  * @param XF_Db_Table_Abstract $db_table 主要支持unique的验证,默认为null
  * @param bool $is_insert 是否为添加数据操作?如果不是,则不强制执行required
  * @return bool
  */
 private function _switchValidateFormData($data, $key, $rules_name, $rules_value, $message, XF_Db_Table_Abstract $db_table = NULL, $is_insert = TRUE)
 {
     $this->_validate_count++;
     //判断规则,分析结果
     $validateOk = true;
     switch ($rules_name) {
         //验证 必填
         case 'required':
             if ($rules_value == 'true') {
                 if (isset($data[$key])) {
                     if (XF_Functions::isEmpty($data[$key])) {
                         $validateOk = false;
                     }
                 } elseif ($is_insert == true) {
                     $validateOk = false;
                 }
             }
             break;
             //验证 数字
         //验证 数字
         case 'number':
             if (isset($data[$key])) {
                 if ($rules_value == 'true') {
                     if (!is_numeric($data[$key])) {
                         $validateOk = false;
                     }
                 }
             }
             break;
             //数字小于
         //数字小于
         case 'lt':
             if (isset($data[$key])) {
                 if (!is_numeric($data[$key]) || !is_numeric($rules_value)) {
                     $validateOk = false;
                 } elseif ($data[$key] >= $rules_value) {
                     $validateOk = false;
                 }
             }
             break;
             //数字大于
         //数字大于
         case 'gt':
             if (isset($data[$key])) {
                 if (!is_numeric($data[$key]) || !is_numeric($rules_value)) {
                     $validateOk = false;
                 } elseif ($data[$key] <= $rules_value) {
                     $validateOk = false;
                 }
             }
             break;
             //等于
         //等于
         case 'equal':
             if (isset($data[$key])) {
                 if ($data[$key] !== $rules_value) {
                     $validateOk = false;
                 }
             }
             break;
             //不等于
         //不等于
         case 'unequal':
             if (isset($data[$key])) {
                 if ($data[$key] === $rules_value) {
                     $validateOk = false;
                 }
             }
             break;
             //验证 是否为正确的email
         //验证 是否为正确的email
         case 'email':
             if (!empty($data[$key]) && $rules_value == 'true') {
                 $validateOk = XF_String_Validate_Email::validate($data[$key]);
             }
             break;
             //验证 是否为正确的电话号码
         //验证 是否为正确的电话号码
         case 'tel':
             if (!empty($data[$key]) && $rules_value == 'true') {
                 $validateOk = XF_String_Validate_Phone::validate($data[$key]);
             }
             break;
             //验证 是否为正确的手机号码
         //验证 是否为正确的手机号码
         case 'mobile':
             if (!empty($data[$key]) && $rules_value == 'true') {
                 $validateOk = XF_String_Validate_Mobile::validate($data[$key]);
             }
             break;
             //验证 是否为正确的身份证号码
         //验证 是否为正确的身份证号码
         case 'card':
             if (!empty($data[$key]) && $rules_value == 'true') {
                 $validateOk = XF_String_Validate_Card::validate($data[$key]);
             }
             break;
             //验证 是否为正确邮政编码
         //验证 是否为正确邮政编码
         case 'zip':
             if (!empty($data[$key]) && $rules_value == 'true') {
                 $validateOk = XF_String_Validate_ZipCode::validate($data[$key]);
             }
             break;
             //验证 最小长度
         //验证 最小长度
         case 'minlen':
             if (!empty($data[$key])) {
                 if (mb_strlen($data[$key], 'utf8') < $rules_value) {
                     $validateOk = false;
                 }
             }
             break;
             //验证 最大长度
         //验证 最大长度
         case 'maxlen':
             if (!empty($data[$key])) {
                 if (mb_strlen($data[$key], 'utf8') > $rules_value) {
                     $validateOk = false;
                 }
             }
             break;
             //验证 ip地址
         //验证 ip地址
         case 'ip':
             if (!empty($data[$key]) && $rules_value == 'true') {
                 $validateOk = XF_String_Validate_Ip::validate($data[$key]);
             }
             break;
             /**
              *  验证 取值范围在列表中
              *  例如:in:2|23|9|0
              *
              */
         /**
          *  验证 取值范围在列表中
          *  例如:in:2|23|9|0
          *
          */
         case 'in':
             if (XF_Functions::isEmpty($data[$key]) == FALSE) {
                 if (!in_array($data[$key], explode('|', $rules_value))) {
                     $validateOk = false;
                 }
             }
             break;
             /**
              *  验证 取值范围必需不在列表中
              *  例如:not_in:2|23|9|0
              *
              */
         /**
          *  验证 取值范围必需不在列表中
          *  例如:not_in:2|23|9|0
          *
          */
         case 'not_in':
             if (XF_Functions::isEmpty($data[$key]) == FALSE) {
                 if (!in_array($data[$key], explode('|', $rules_value))) {
                     $validateOk = false;
                 }
             }
             break;
             //验证与指定的字段值是否相同
         //验证与指定的字段值是否相同
         case 'confirm':
             if (isset($data[$key])) {
                 if ($data[$key] != $data[$rules_value]) {
                     $validateOk = false;
                 }
             }
             break;
         case 'date':
             if (isset($data[$key]) && $rules_value == 'true') {
                 if (!XF_String_Validate_Date::validate($data[$key])) {
                     $validateOk = false;
                 }
             }
             break;
         case 'time':
             if (isset($data[$key]) && $rules_value == 'true') {
                 if (!XF_String_Validate_Time::validate($data[$key])) {
                     $validateOk = false;
                 }
             }
             break;
         case 'unique':
             if (isset($data[$key]) && $rules_value == 'true') {
                 if ($db_table == NULL) {
                     $validateOk = false;
                 } elseif (!XF_Db_Table_Validate_Unique::validate($data[$key], $key, $db_table, $is_insert)) {
                     $validateOk = false;
                 }
             }
             break;
     }
     //字段值为 '$NULL' 时直接通过验证 2014-09-3
     if (isset($data[$key]) && $data[$key] == '$NULL') {
         $validateOk = true;
     }
     //没有错误
     if ($validateOk) {
         $this->_validate_success_count++;
         return true;
     } else {
         //记录错误
         $errorMessage = $key . '=>' . $rules_name . ':' . $rules_value;
         if (isset($message[$key]) && is_array($message[$key]) && isset($message[$key][$rules_name])) {
             $errorMessage = $message[$key][$rules_name];
         } elseif (isset($message[$key])) {
             $errorMessage = (string) $message[$key];
         }
         XF_DataPool::getInstance()->replace('TableFieldDataValidateError', $errorMessage);
         return false;
     }
 }
コード例 #2
0
 /**
  * 发送验证码
  * @param string $mobile 手机号码
  * @param int $smsCode 验证码
  * @throws XF_Exception
  */
 public function sendSmsCode($mobile, $smsCode)
 {
     if (XF_String_Validate_Mobile::validate($mobile) == FALSE) {
         throw new XF_Exception('手机号码错误!');
     }
     //获取模板
     $event = $this->get(100);
     if ($event->status == '0') {
         return FALSE;
     }
     //短信
     if ($event->status == '2') {
         if ($event->msm_tpl == '') {
             throw new XF_Exception('短信模板为空,无法发送!');
         }
         $message = str_replace(array('{smsCode}', '{mobile}', '{hour}', '{minute}'), array($smsCode, $mobile, date('H'), date('i')), $event->msm_tpl);
         $status = $this->sendSms($mobile, $message, 'code');
         if ($status == TRUE) {
             $mem = XF_Cache_Memcache::getInstance();
             $mem->setCacheTime(10);
             $mem->add($mobile . '_' . $smsCode, $smsCode);
         }
         return $status;
     }
     return FALSE;
 }