🦔
【PHP】filter モジュールを使って文字数をチェックする
正規表現を使った書き方は次のとおり。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