preg_match()関数で¥マークがマッチしない

preg_match()関数で円マークがマッチせずに悩んだ話。

結局のところ、UTF-8の円マークに相当する文字はいろいろあって
バックスラッシュ、UTF-8の半角の円、全角の円の3つある。
それぞれのコードは

var_dump(bin2hex("\\")); //バックスラッシュ
var_dump(bin2hex("¥")); //utf-8の半角円
var_dump(bin2hex("¥")); //utf-8の全角の円

string(2) "5c"
string(4) "c2a5"
string(6) "efbfa5"

先頭の円ですべてのパターンでマッチさせるには

 if(preg_match('/^[\\\¥¥]/u',$str)){

とするのがよさそう。

プログラムで中身をダンプさせてコンソール画面からコピペしてVsCodeの編集画面に持ってきたらなぜかバックスラッシュになっちゃってて、それで混乱しました。
UTF-8にはバックスラッシュの円とは別に半角の¥っていうのが、別にあるのを初めて知りました。

参考
https://teratail.com/questions/163584

スポンサーリンク

タイトルとURLをコピーしました