gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

カタカナをvalidateしてみる

考えてみるとあんまり真面目に考察してなかったので調べてみる…とまぁ、色々なパターンが。
概ね正規表現で、preg_matchまたはmb_eregを使うケースが多いようなのですが(マルチバイトって意味だとmb_eregかなぁとか思いつつ)。


正規表現パターンが概ね

mb_ereg("^[ァ-ヶー]+$", $string)
mb_ereg("^[ァ-ヴー]+$", $string)
preg_match("/^[ァ-ヶー]+$/u", $string)
preg_match('/^(?:\xE3\x82[\xA1-\xBF]|\xE3\x83[\x80-\xB6]|\xE3\x83\xBC)+$/', $string)
preg_match("/^[ァ-ヾ]+$/u", $string)
preg_match("/^(\xe3\x82[\xa1-\xbf]|\xe3\x83[\x80-\xbe])+$/u", $string)

と、ばらんばらん。
^と$はとりあえず置いておくとして。
先頭が「ァ」なのは確定。
あとはどしよ?
ってんで、調査

<?php
require_once('debug_util.inc');

debug_util::dump_string_put("ァ");
echo "\n";
debug_util::dump_string_put("ヾ");
debug_util::dump_string_put("ヶ");
debug_util::dump_string_put("ー");
debug_util::dump_string_put("ヴ");


結果

ァ( (e3)(82)(a1) )

ヾ( (e3)(83)(be) )
ヶ( (e3)(83)(b6) )
ー( (e3)(83)(bc) )
ヴ( (e3)(83)(b4) )

うんまぁ先頭が「ァ(\xe3\x82\xa1)」ってのはよいとして。
ヴまでかヶまでかってぇとヶまでだなぁ。多分飛んでーが入る。
一番遠いのはヾ。


で、その辺前提にUTF-8表を見ると(先に見ろよってのはなし)。
E382A1(ァ)からE383B6(ヶ)までは割と穏当。
その先って「? ? ? ? ・ ー ヽ ヾ」ってなるので(?なのは、上手く表示でけんかった)。
参考こちら。
http://orange-factory.com/sample/utf8/code3-e3.html


うんまぁ「中黒気になる」けど、「[ァ-ヾ]」は、まぁざっくりとはよいかもしれぬ。
^と$は\aと\Zにするとして、まぁ、そのあたりかねぇ、的な。


ちなみにひらがなだと、ぁ(e3 81 81)から…まぁゞ(e3 82 9e)まで、で、いいんぢゃねぇかなぁ、っと。
ざっくり。