/**    * Validate the guessed extension of a file upload is in a set of file extensions.    *    * @param  string  $attribute    * @param  mixed  $value    * @param  array   $parameters    * @return bool    */   protected function validateMimes($attribute, $value, $parameters)   {       if (! $this->isAValidFileInstance($value)) {           return false;       }// first this must be a file.       return $value->getPath() != '' && in_array($value->guessExtension(), $parameters);    // get path()   }// this extension about file be guessed   /**    * Validate the MIME type of a file upload attribute is in a set of MIME types.    *    * @param  string  $attribute    * @param  mixed  $value    * @param  array  $parameters    * @return bool    */   protected function validateMimetypes($attribute, $value, $parameters)   {       if (! $this->isAValidFileInstance($value)) {           return false;       }       return $value->getPath() != '' && in_array($value->getMimeType(), $parameters);   }//validate the MIME type of a file upload attribute is in a set of MIME types   /**    * Check that the given value is a valid file instance.    *    * @param  mixed  $value    * @return bool    */   public function isAValidFileInstance($value)   {       if ($value instanceof UploadedFile && ! $value->isValid()) {           return false;       }// this value is a instanceof this Uploaded File       return $value instanceof File;   }//check that the given value is a valid file instance.   /**    * Validate that an attribute contains only alphabetic characters.    *    * @param  string  $attribute    * @param  mixed   $value    * @return bool    */   protected function validateAlpha($attribute, $value)   {       return is_string($value) && preg_match('/^[\pL\pM]+$/u', $value);   }//get this value just abcd  means it is alphabetic// just return this value,use preg_match   /**    * Validate that an attribute contains only alpha-numeric characters.    *    * @param  string  $attribute    * @param  mixed   $value    * @return bool    */   protected function validateAlphaNum($attribute, $value)   {       if (! is_string($value) && ! is_numeric($value)) {           return false;       }// this is_string       return preg_match('/^[\pL\pM\pN]+$/u', $value);//change this preg match   }// this must be alpha and numeric characters.   /**    * Validate that an attribute contains only alpha-numeric characters, dashes, and underscores.    *    * @param  string  $attribute    * @param  mixed   $value    * @return bool    */   protected function validateAlphaDash($attribute, $value)   {       if (! is_string($value) && ! is_numeric($value)) {           return false;       }       return preg_match('/^[\pL\pM\pN_-]+$/u', $value);   }// a validate way, alpha number dash and underscores   /**    * Validate that an attribute passes a regular expression check.    *    * @param  string  $attribute    * @param  mixed   $value    * @param  array   $parameters    * @return bool    */   protected function validateRegex($attribute, $value, $parameters)   {       if (! is_string($value) && ! is_numeric($value)) {           return false;       }       $this->requireParameterCount(1, $parameters, 'regex');       return preg_match($parameters[0], $value);   }// a user rule , this rule is a regex   /**    * Validate that an attribute is a valid date.    *    * @param  string  $attribute    * @param  mixed   $value    * @return bool    */   protected function validateDate($attribute, $value)   {//Validate that an attribute is a valid date.       if ($value instanceof DateTime) {           return true;       }// a instanceof DateTime       if (strtotime($value) === false) {           return false;       }// a false       $date = date_parse($value);// get date       return checkdate($date['month'], $date['day'], $date['year']);   }// check date   /**    * Validate that an attribute matches a date format.    *    * @param  string  $attribute    * @param  mixed   $value    * @param  array   $parameters    * @return bool    */   protected function validateDateFormat($attribute, $value, $parameters)   {       $this->requireParameterCount(1, $parameters, 'date_format');//get count       $parsed = date_parse_from_format($parameters[0], $value);//date_parse_from_format       return $parsed['error_count'] === 0 && $parsed['warning_count'] === 0;//error_count   }// validate that an attribute matches a date format   /**    * Validate the date is before a given date.    *    * @param  string  $attribute    * @param  mixed   $value    * @param  array   $parameters    * @return bool    */   protected function validateBefore($attribute, $value, $parameters)   {       $this->requireParameterCount(1, $parameters, 'before');       if ($format = $this->getDateFormat($attribute)) {           return $this->validateBeforeWithFormat($format, $value, $parameters);       }       if (! ($date = strtotime($parameters[0]))) {           return strtotime($value) < strtotime($this->getValue($parameters[0]));       }//str to time       return strtotime($value) < $date;   }//validate before   /**    * Validate the date is before a given date with a given format.    *    * @param  string  $format    * @param  mixed   $value    * @param  array   $parameters    * @return bool    */   protected function validateBeforeWithFormat($format, $value, $parameters)   {       $param = $this->getValue($parameters[0]) ?: $parameters[0];       return $this->checkDateTimeOrder($format, $value, $param);   }//validate before with format   /**    * Validate the date is after a given date.    *    * @param  string  $attribute    * @param  mixed   $value    * @param  array   $parameters    * @return bool    */   protected function validateAfter($attribute, $value, $parameters)   {       $this->requireParameterCount(1, $parameters, 'after');       if ($format = $this->getDateFormat($attribute)) {           return $this->validateAfterWithFormat($format, $value, $parameters);       }       if (! ($date = strtotime($parameters[0]))) {           return strtotime($value) > strtotime($this->getValue($parameters[0]));       }       return strtotime($value) > $date;   }// validate after ,just a monitor model   /**    * Validate the date is after a given date with a given format.    *    * @param  string  $format    * @param  mixed   $value    * @param  array   $parameters    * @return bool    */   protected function validateAfterWithFormat($format, $value, $parameters)   {       $param = $this->getValue($parameters[0]) ?: $parameters[0];// get the param       return $this->checkDateTimeOrder($format, $param, $value);// get the check result   }// validate the date is after a given date with a given format