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:半角スペースって制御文字なのかな?