Ejemplo n.º 1
0
 /**
  * For Regex
  * 
  * @param Regex $rule
  * @return callable|null
  */
 public static function regex(Regex $rule)
 {
     $filters = array();
     $is_multiple = !$rule->types(Regex::TYPE_NORMAL);
     $is_multiple and $filters[] = Cast::explode($rule);
     if ($rule->types(Regex::TYPE_RANGE)) {
         $filters[] = Cast::fillSide($rule);
         $filters[] = Check::greaterThanOrEqual();
         $rule->info('is_datetime') and $filters[] = Cast::datetime($rule);
     }
     if ($rule->info('is_number')) {
         $filters[] = $is_multiple ? Check::numberMultiple($rule) : Check::number($rule);
     }
     $count = count($filters);
     if (!$count) {
         return null;
     }
     if ($count === 1) {
         return $filters[0];
     }
     return function ($input) use($filters) {
         foreach ($filters as $filter) {
             $input = $filter($input);
             if ($input === null) {
                 return null;
             }
         }
         return $input;
     };
 }
Ejemplo n.º 2
0
 /**
  * Make a part of the pattern
  * 
  * @param Regex $rule
  * @return string
  */
 protected static function makePart(self $rule)
 {
     if ($rule->is_original && $rule->types(self::TYPE_NORMAL)) {
         return $rule->piece;
     }
     $core = $rule->is_number || $rule->is_original ? $rule->piece : $rule->piece . Straw::getConfigure('sub_characters');
     $repeat = self::makeRepeatPattern($rule->length);
     return sprintf('[%s]{%s,%s}', $core, $repeat[0], $repeat[1]);
 }
Ejemplo n.º 3
0
 /**
  * Add regex rule
  * 
  * @param string|string[] $key
  * @param string|string[] $default
  * @param int $type
  * @return Regex
  */
 private function addRegex($key, $default, $type)
 {
     return $default || $this->existsSource($key) ? $this->register(Regex::create($key, $default, $type)) : self::getDummy('regex');
 }