preg_match()関数で円マークがうまくマッチしません。
たとえば¥150,000 (バックスラッシュで表記されてしまうのであえて全角で書いてますが、すべて半角)を 150000 という数字だけに変換したいということで、先頭が円マークかどうかで判断して変換が必要かどうかを調べるため、以下のように書きました。
PHP
1 $str = "\150,000"; 2 if(preg_match('/^\/',$str)){ 3 var_dump("マッチした"); 4 }
これ自体はうまく動作します。
ですがが、外部から持ってきた文字列だとマッチしませんでした。
試したこと
正規表現を/^\/ とか /^/u とか /^¥/uなど試してみましたがいずれもだめでした。
ためしにbin2hex()で16進数に変換して、文字コードを出してみたところ
プログラム書いたほう
string(8) "\150,000"
string(16) "5c3135302c303030"
外部からの読み込み
string(9) "\150,000"
string(18) "c2a53135302c303030"
円マークの部分は 5c かと思われますが、外部からの読み込みでは c2a53 になっており、表示上は同じですが、コードが違うようです。
UTF8のコード表を見るとどちらも円マークを意味するもののようなのですが…。
マッチさせるにはどうしたらよいでしょうか?
環境
PHP 7.1.8 (cli) (built: Aug 2 2017 14:25:25) ( NTS )
文字コードはすべてutf-8
回答2件
あなたの回答
tips
プレビュー