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に怒られてしまいます。
エラーの解消法
エラーの解消法は、前述通り
-
(ハイフン)をエスケープする[ ]
の初めか最後で-
(ハイフン)を指定する
のどちらかで可能です。