UTF-8 の文字にマッチする正規表現

たつをさんとこが発端。


成瀬さんによる実用的な版から:

$RE_UTF8CHAR_STRICT = /(?:
	[\x00-\x7f]|                   # U+0000   - U+007F
	[\xC2-\xDF][\x80-\xBF]|        # U+0080   - U+07FF
	[\xE0-\xEF][\x80-\xBF]{2}|     # U+0800   - U+3FFFF  (ry
	[\xF0-\xF4][\x80-\xBF]{3}      # U+10000  - U+10FFFF (ry
)/x


小飼さんによるゲンミツな版から:

$RE_UTF8CHAR_STRICT_AND_SECURE = /(?:
	[\x00-\x7F]|                   # U+0000   - U+007F
	[\xC2-\xDF][\x80-\xBF]|        # U+0080   - U+07FF
	\xE0[\xA0-\xBF][\x80-\xBF]|    # U+0800   - U+0FFF
	[\xE1-\xEC][\x80-\xBF]{2}|     # U+1000   - U+CFFF
	\xED[\x80-\x9F][\x80-\xBF]|    # U+D000   - U+D7FF
	\xEF[\x80-\xBF][\x80-\xBD]|    # U+E000   - U+FFFD
	\xF0[\x90-\xBF][\x80-\xBF]{2}| # U+10000  - U+3FFFF
	[\xF1-\xF3][\x80-\xBF]{3}|     # U+40000  - U+FFFFF
	\xF4[\x80-\x8F][\x80-\xBF]{2}  # U+100000 - U+10FFFF
)/x

バラけて居るので自分ですぐ使えるように纏めさせてもらった。私が頭を使った部分は全くありません。ブックマークはリンク先推奨。変数名・インデント・記法(Perl to Ruby)を個人の趣味に直した関係で typo あるかも。未テストです。


こういう時は「リンク禁止」って言いたくなるな。このエントリだけ「オレのみ閲覧可能」とかできないのだろうか? 自サバ立てろってことかなぁ。