マルチバイトの弦(UTF-8エンコード中国語、日本、韓国など)を扱う場合、標準的な正規表現関数は、文字セットの問題を正しく処理しない場合があります。この問題を解決するために、PHPは一連のマルチバイト文字列関数を提供します。そのうちの1つはMB_EREGI_REPLACEです。この記事では、この関数を使用して、文字列内のすべての数値をAsterisk( * )などの指定された文字に置き換える方法について説明します。
MB_EREGI_REPLACEは、PHPのマルチバイト文字列拡張機能の1つです。 eregi_replaceと同様に機能しますが、マルチバイト文字を正しく処理できます。基本的な構文は次のとおりです。
string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msri" ] )
パラメーター説明:
$パターン:一致する正規表現。
$の交換:一致するコンテンツを置き換えるために使用される文字列。
$文字列:処理するターゲット文字列。
$ option (オプション):複数の行( m )、新しい行の一致ドット、ケース( i )を無視するドットをデフォルトで一致させるオプションを一致させます。
??注: MB_EREGI_REPLACE関数はPHP 7.0.0で削除されており、新しいプロジェクトでの使用をお勧めしません。まだPHP 5.xを使用している場合は、使用できます。それ以外の場合は、代わりにpreg_replaceを使用する必要があります。
次の文字列があるとします。
$str = "ユーザーIDはい12345,验证码はい67890";
その中のすべての数値を*に置き換えたいと考えています。次のコードを使用できます。
<?php
mb_internal_encoding("UTF-8"); // 内部エンコーディングを設定します
$str = "ユーザーIDはい12345,验证码はい67890";
// 使用 mb_eregi_replace すべての番号を交換します
$result = mb_eregi_replace("[0-9]", "*", $str);
echo $result;
?>
出力の結果は次のとおりです。
ユーザーIDはい*****,验证码はい*****
この例では、 [0-9]は1ビット番号を一致させることを意味します。複数の数字を一致させ、アスタリスクに置き換える場合は、次のパターンを使用できます。
$result = mb_eregi_replace("[0-9]+", "*", $str);
出力:
ユーザーIDはい*,验证码はい*
MB_EREGI_REPLACEが新しいバージョンで放棄されていることを考慮すると、 preg_replaceを使用することをお勧めします。
<?php
$str = "ユーザーIDはい12345,验证码はい67890";
$result = preg_replace("/\d+/", "*", $str);
echo $result;
?>
preg_replaceは、UTF-8もサポートするPCREベースの正規表現機能です。必ずU修飾子を使用してください。
$result = preg_replace("/\d+/u", "*", $str);
この数字の交換は、よく使用されます。
データ脱感作:ID番号や携帯電話番号などの機密情報を非表示にします。
ログフィルタリング:数字がデバッグ情報に漏れないようにします。
インターフェイスの美化:番号を *または?などの視覚的なプレースホルダーに変換します。
たとえば、M66.NETが提供するユーザー情報保護インターフェイスでは、同様の方法を使用して、ユーザーのプライバシーを保護するための入力文字列を処理します。
MB_EREGI_REPLACEは、PHPの古いバージョンで強力なマルチバイトサポートを提供していますが、放棄されて以来、開発者は新しいプロジェクトでpreg_replaceを使用し、Unicode修飾子を組み込むことをお勧めします。どの方法を使用しても、文字列の数を柔軟に置き換えて、セキュリティと美学の二重の要件を満たすことができます。