🦔

【PHP】filter モジュールを使って文字数をチェックする

2023/10/10に公開

正規表現を使った書き方は次のとおり。FILTER_VALIDATE_REGEXP 検証フィルターを使う。

$min = 3;
$max = 5;
$str = 'あいうえお';
$str2 = 'かきくけこさしすせそ';

var_dump(
  $str === str_validate_len($str, $min, $max),
  false === str_validate_len($str2, $min, $max)
);
function str_validate_len(string $str, int $min = 1, int $max): mixed {
  $opts = [
    'options' => ['regexp' => sprintf('/^.{%d,%d}$/u', $min, $max)]
  ];

  return filter_var($str, FILTER_VALIDATE_REGEXP, $opts);
}

FILTER_CALLBACK を使ったコードは次の通り。

function str_validate_len2(string $str, int $min = 1, int $max): mixed {
  $opts = [
    'options' => function ($str) use($min, $max) {
        return preg_match(sprintf('/^.{%d,%d}$/su', $min, $max), $str) ? $str : false;
      }
  ];
  return filter_var($str, FILTER_CALLBACK, $opts);
}

Oniguruma を使う場合は次のとおり。

function str_validate_len3(string $str, int $min = 1, int $max): mixed {
  $opts = [
    'options' => function ($str) use($min, $max) {
      return mb_ereg_match(sprintf('^.{%d,%d}$', $min, $max), $str, 'm') ? $str : false;
      }
  ];
  return filter_var($str, FILTER_CALLBACK, $opts);
}

Discussion