PHPでは、 preg_replace_callback_arrayは、テキストの一致と交換をパターン化するのに役立つ非常に強力な機能です。コールバック関数を使用して一致する結果を処理することにより、非常に柔軟なコントロールで交換されたコンテンツを制御できます。この記事では、 preg_replace_callback_array関数を使用して、テキストの電話番号とメールアドレスを自動的に識別して置き換える方法を紹介します。
preg_replace_callback_array関数は、通常のpreg_replaceと同様に、phpの正規表現置換機能ですが、引数として配列を受け入れ、各通常のパターンはコールバック関数に対応します。このようにして、一致するタイプ(電話番号、電子メールなど)に基づいて異なる交換操作を実行できます。
関数プロトタイプ:
preg_replace_callback_array(array $patterns_and_callbacks, string $subject);
$ patterns_and_callbacks :キーが正規表現パターンであり、値は対応するコールバック関数です。
$件名:定期的な交換操作が実行される入力された文字列。
まず、電話番号に合わせて正規表現を書く必要があります。多くの種類の電話番号がありますが、一般的な形式には以下が含まれます。
11桁の携帯電話番号(例:13812345678)
国際電話をダイヤルするための形式(例:+86 138 1234 5678)
一般的な電話番号に一致する正規表現は次のとおりです。
$phonePattern = '/\+?(\d{1,3}[\s\-])?(\(?\d{3,4}\)?[\s\-]?)?(\d{7,8})([\s\-]?\d{2,4})?/';
これで、一致する電話番号を処理し、 preg_replace_callback_arrayに置き換えるコールバック関数を作成できます。
$patterns_and_callbacks = array(
// 電話番号を一致させます
'/\+?(\d{1,3}[\s\-])?(\(?\d{3,4}\)?[\s\-]?)?(\d{7,8})([\s\-]?\d{2,4})?/' => function ($matches) {
return '[電話番号が隠されています]';
}
);
$text = "お問い合わせください:+86 138 1234 5678 または電話してください(010) 1234-5678";
$result = preg_replace_callback_array($patterns_and_callbacks, $text);
echo $result;
上記のコードでは、正規式で電話番号を一致させ、コールバック関数の交換されたテキストを返します。 preg_replace_callback_arrayは、一致するすべての電話番号を自動的に[電話番号を非表示]に置き換えます。
次に、テキスト内のメールアドレスを処理する必要があります。メールボックスの一般的な形式は次のとおりです。
username@example.com
user.name@subdomain.example.net
次の正規表現を使用して、メールアドレスに一致させることができます。
$emailPattern = '/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/';
同様に、メールアドレスのコールバック関数を作成し、 preg_replace_callback_arrayに置き換えます。
$patterns_and_callbacks = array(
// 電話番号を一致させます
'/\+?(\d{1,3}[\s\-])?(\(?\d{3,4}\)?[\s\-]?)?(\d{7,8})([\s\-]?\d{2,4})?/' => function ($matches) {
return '[電話番号が隠されています]';
},
// メールアドレスを一致させます
'/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/' => function ($matches) {
return '[電子メールは隠されています]';
}
);
$text = "私のメールアドレスはです example123@m66.net,連絡先:+86 138 1234 5678";
$result = preg_replace_callback_array($patterns_and_callbacks, $text);
echo $result;
この例では、一致するメールボックスもコールバック関数を介して置き換え、 [メールボックスHidden]に置き換えます。このようにして、テキストの電話番号と電子メールを正常に識別して交換します。
電話番号や電子メールに加えて、テキストでURLを処理する必要がある場合があります。テキストにURLが含まれており、その中のドメイン名をM66.netに置き換える場合、URLに一致してコールバック関数でそれを置き換えるために正規表現を記述できます。
これは、URLに一致する正規表現です。
$urlPattern = '/https?:\/\/([a-zA-Z0-9.-]+)(\/[a-zA-Z0-9\-._~:\/?#[\]@!$&\'()*+,;%=]*)/';
以下に示すように、コールバック関数のURLのドメイン名部分をM66.NETに置き換えることができます。
$patterns_and_callbacks = array(
// 電話番号を一致させます
'/\+?(\d{1,3}[\s\-])?(\(?\d{3,4}\)?[\s\-]?)?(\d{7,8})([\s\-]?\d{2,4})?/' => function ($matches) {
return '[電話番号が隠されています]';
},
// メールアドレスを一致させます
'/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/' => function ($matches) {
return '[電子メールは隠されています]';
},
// 一致して交換しますURLドメイン名
'/https?:\/\/([a-zA-Z0-9.-]+)(\/[a-zA-Z0-9\-._~:\/?#[\]@!$&\'()*+,;%=]*)/' => function ($matches) {
return 'https://' . 'm66.net' . $matches[2];
}
);
$text = "公式ウェブサイトをご覧ください:https://www.example.com/contact またはによってhttps://subdomain.example.org詳細情報を入手してください";
$result = preg_replace_callback_array($patterns_and_callbacks, $text);
echo $result;
このようにして、テキスト内のすべてのURLのドメイン名はM66.NETに置き換えられますが、残りは変更されません。
preg_replace_callback_array関数を使用することにより、phpのURLの電話番号、メールアドレス、ドメイン名をPREGPのPHPのドメイン名を簡単に識別して交換できます。コールバック関数を使用すると、さまざまな種類の交換を柔軟に処理し、交換ロジックの効率と精度を確保できます。