phpのPCREな正規表現でASCII制御文字を検出するパターンのメモ

<?php
if(0 < preg_match('/[\x00-\x20\x7f]/', $subject))
    return false; //ASCII制御文字が含まれている

16進数でASCIIのコードを並べてます。
ただそれだけなんですが、使いたいときに、いちいちASCIIコードを確認して作るのがめんどうなのでメモ。

[\x00-\x20\x7f]
全制御文字
[\x00-\x1f\x7f]
半角スペース*1以外の制御文字
[\x00-\x09\x0b\x0c\x0e-\x1f\x7f]
半角スペースとCRとLF以外の制御文字


ASCII文字コード - IT用語辞典
他にも通したい制御文字があれば、ASCII文字コード表を元に同じように16進数で作れば出来ます。

ちょっとif文が正しいか気になったので。

<?php
var_dump(0 < false);
var_dump(0 < true);
var_dump(0 >= false);
var_dump(0 >= true);
bool(false)
bool(true)
bool(true)
bool(false)

preg_match()はエラー時にfalseを返します。
検出しなければ0を、検出すればその個数を返しますので、(0 < false)がfalseになるかの確認。

*1:半角スペースって制御文字なのかな?