tanikoのぶろぐ

マルチバイト周りに対応したローマ数字のパーサを作った

日本語とは厄介なのでしょうか? とても扱いやすい言語だとは思います. 特に数字周りに関しては素晴らしい思っています. 英語の数え方とか加減乗除とかは厄介だと思います.
では, 日本の厄介な部分はどこかというと, マルチバイト文字だということ. 文字数が多すぎる.
ということで, 今回はローマ数字周りのライブラリです.

まずは, マルチバイト周りのローマ数字について. 10を例に話します.

xX
説明半角小文字半角大文字全角小文字全角大文字ローマ数字(小文字)ローマ数字(大文字)
Unicode12088653686533685698553

11を表すには? xi? XI? xi? XI? ? ?

辛い.

そんなわけでtaniko/romansを作りました. インストールはcomposer require taniko/romansでできます.

<?php
require 'vendor/autoload.php';

// 全角大文字
var_dump(Taniko\Romans\Parser::toInt('MMXVII'));
// int(2017)

// ローマ数字(大文字)
var_dump(Taniko\Romans\Parser::toInt('MMⅩVII'));
// int(2017)

ちなみに, PHP 7.2からはmb_ord(), mb_chr()が使えるようになりました. symfony/polyfill-mbstringを使わなくてもいいようになりました.

最後に, PHPは最高ですね.

既存のライブラリにマルチバイト周りをASCIIに変換する部分だけのPRでも作る?