PHP: Filter - Manualを参考に。
文字列の長さもフィルタリングしたい。
ユーザー定義の関数でデータをフィルタリングしたいときはFILTER_CALLBACKフィルタを使う。
例えば1文字以上5文字以下の文字列なら
<?php
function FILTER_VALIDATE_LENGTH($value) {
$len = mb_strlen($value);
if (1 <= $len && $len <= 5) {
return $value;
}
return false;
}
$tests = array(
'', // 空文字列
'あ', // 1文字
'あいうえお', // 5文字
'あいうえおか', // 6文字
);
foreach ($tests as $test) {
var_dump(filter_var($test, FILTER_CALLBACK, array('options' => 'FILTER_VALIDATE_LENGTH')));
}
$ php foo.php
bool(false)
string(3) "あ"
string(15) "あいうえお"
bool(false)
任意の長さの文字列をフィルタリングしたいなら(ついでにエンコーディングも指定したい場合)
<?php
function makeFilterValidateLength($min, $max, $encoding = null) {
if (is_null($encoding)) {
$encoding = mb_internal_encoding();
}
return function ($value) use ($min, $max, $encoding) {
$len = mb_strlen($value, $encoding);
if ($min <= $len && $len <= $max) {
return $value;
}
return false;
};
}
$tests = array(
'', // 空文字列
'あ', // 1文字
'あいうえお', // 5文字
'あいうえおか', // 6文字
);
foreach ($tests as $test) {
var_dump(filter_var($test, FILTER_CALLBACK, array('options' => makeFilterValidateLength(5, 5))));
}
$ php foo.php
bool(false)
bool(false)
string(15) "あいうえお"
bool(false)
エンコーディングの指定が省略されてたらmb_internal_encoding()を使うようにする。
0 件のコメント:
コメントを投稿