preg_match(): invalid range in character class at offset 7
preg_match(): invalid range in character class at offset 7
PHP5.3からPHP5.6にアップデートにしたときに、正規表現の仕様書変更によって、よく起きるエラーのようです。
エラーの意味
エラーメッセージは、「正規表現で指定している範囲に文字は存在しません」といった感じの内容になっています。
エラーの原因
エラーの原因は、正規表現内に書かれている「-(ハイフン)」にあります。
PHP5.6以前は、[\.-\w]
の様な形でもエラーは出ませんが、
PHP5.6以降は、[\.\-\w]
のようにエスケープするか、
[-\.\w]
[\.\w-]
[ ]の初めか最後で-(ハイフン)を指定しなくてはいけなくなりました。
-(ハイフン)がエスケープされていない状態で文字の間にあると
[A-Z]
がAからZの間の文字を指すように
[\.-\w]
なども.(ドット)と\w([A-Za-z0-9_])の間の文字を指しているとPHPに解釈されてしまい「指定している範囲に文字は存在しません」っとPHPに怒られてしまいます。
エラーの解消法
エラーの解消法は、前述通り
- -(ハイフン)をエスケープする
- [ ]の初めか最後で-(ハイフン)を指定する
のどちらかで可能です。