PHPの練習問題を使用して、与えられた文字列から末尾にある数値を抽出するサンプルコードを紹介します。
課題
与えられた文字列から、末尾にある数値以外の文字を検索し、それ以前の数値を抽出するコードを作成してください。また、全角数字も半角に変換して取り出してください。
< 入力例 >
AB1234
CDEF1
ABCE55
あ1234
1あああ293
CDEF1
ABCE55
あ1234
1あああ293
< 出力例 >
1234
1
55
1234
293
1
55
1234
293
答え
それでは、コードを確認してみましょう。
// 入力例
$inputs = [
'AB1234',
'CDEF1',
'ABCE55',
'あ1234',
'1あああ293'
];
// 出力例
foreach ($inputs as $input) {
echo extractNumbers($input) . PHP_EOL;
}
/**
* 文字列から末尾の数値を抽出する関数
*
* @param string $input 抽出対象の文字列
* @return string 抽出された数値
*/
function extractNumbers($input) {
// 全角数字を半角に変換する
$input = mb_convert_kana($input, 'n', 'UTF-8');
// 文字列の末尾からループし、数値以外が見つかるまで抽出
$numbers = '';
$foundNumeric = false;
$length = mb_strlen($input);
for ($i = $length - 1; $i >= 0; $i--) {
$char = mb_substr($input, $i, 1);
if (is_numeric($char)) {
$numbers = $char . $numbers;
$foundNumeric = true;
} elseif ($foundNumeric) {
// 数値以外が見つかり、すでに数字が見つかっている場合は抽出終了
break;
}
}
return $numbers;
}
このコードは与えられた文字列から数値を末尾から検索し、それ以前の数値を抽出します。全角数字も半角に変換して処理します。入力例の文字列に対して、出力例のように数値が抽出されます。