Dans PHP, preg_replace_callback_array est une fonction très puissante qui peut nous aider à correspondre et à remplacer le texte. En utilisant des fonctions de rappel pour traiter les résultats de correspondance, nous pouvons contrôler le contenu remplacé par un contrôle très flexible. Cet article présentera comment utiliser la fonction preg_replace_callback_array pour identifier et remplacer automatiquement le numéro de téléphone et l'adresse e-mail dans le texte.
La fonction preg_replace_callback_array est une fonction de remplacement d'expression régulière dans PHP, similaire à la prég_replace normale, mais elle accepte un tableau comme argument, et chaque modèle régulier correspond à une fonction de rappel. De cette façon, nous pouvons effectuer différentes opérations de remplacement en fonction des types de correspondance (tels que le numéro de téléphone, les e-mails, etc.).
Prototype de fonction:
preg_replace_callback_array(array $patterns_and_callbacks, string $subject);
$ motifs_and_callbacks : un tableau où la clé est un modèle d'expression régulière et la valeur est la fonction de rappel correspondante.
$ Sujet : la chaîne entrée dans laquelle une opération de remplacement régulière est effectuée.
Nous devons d'abord écrire une expression régulière pour correspondre au numéro de téléphone. Il existe de nombreux types de numéros de téléphone, mais les formats courants comprennent les éléments suivants:
Numéro de téléphone mobile à 11 chiffres (par exemple: 13812345678)
Format pour la composition des téléphones internationaux (par exemple: +86 138 1234 5678)
Voici une expression régulière qui correspond aux numéros de téléphone communs:
$phonePattern = '/\+?(\d{1,3}[\s\-])?(\(?\d{3,4}\)?[\s\-]?)?(\d{7,8})([\s\-]?\d{2,4})?/';
Maintenant, nous pouvons écrire une fonction de rappel pour gérer le numéro de téléphone correspondant et le remplacer par preg_replace_callback_array .
$patterns_and_callbacks = array(
// Faire correspondre le numéro de téléphone
'/\+?(\d{1,3}[\s\-])?(\(?\d{3,4}\)?[\s\-]?)?(\d{7,8})([\s\-]?\d{2,4})?/' => function ($matches) {
return '[Le numéro de téléphone est caché]';
}
);
$text = "Veuillez nous contacter:+86 138 1234 5678 Ou appeler(010) 1234-5678";
$result = preg_replace_callback_array($patterns_and_callbacks, $text);
echo $result;
Dans le code ci-dessus, nous correspondons au numéro de téléphone via une expression régulière et renvoyons un texte remplacé dans la fonction de rappel. preg_replace_callback_array remplacera automatiquement tous les numéros de téléphone correspondants par [numéro de téléphone masqué] .
Ensuite, nous devons traiter l'adresse e-mail dans le texte. Les formats courants pour les boîtes aux lettres comprennent:
username@example.com
user.name@subdomain.example.net
Nous pouvons utiliser l'expression régulière suivante pour correspondre à notre adresse e-mail:
$emailPattern = '/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/';
De même, nous créerons une fonction de rappel pour l'adresse e-mail et la remplacerons par preg_replace_callback_array .
$patterns_and_callbacks = array(
// Faire correspondre le numéro de téléphone
'/\+?(\d{1,3}[\s\-])?(\(?\d{3,4}\)?[\s\-]?)?(\d{7,8})([\s\-]?\d{2,4})?/' => function ($matches) {
return '[Le numéro de téléphone est caché]';
},
// Correspondre à l'adresse e-mail
'/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/' => function ($matches) {
return '[Le courrier électronique est caché]';
}
);
$text = "Mon adresse e-mail est example123@m66.net,Coordonnées:+86 138 1234 5678";
$result = preg_replace_callback_array($patterns_and_callbacks, $text);
echo $result;
Dans cet exemple, nous remplaçons également la boîte aux lettres correspondante via la fonction de rappel, la remplaçant par [Boîte aux lettres Hidden] . De cette façon, nous identifions et remplaçons avec succès le numéro de téléphone et le courrier électronique dans le texte.
En plus des numéros de téléphone et des e-mails, nous devons parfois traiter les URL dans le texte. Si le texte contient une URL et que nous voulons remplacer le nom de domaine dedans par m66.net , nous pouvons écrire une expression régulière pour correspondre à l'URL et la remplacer dans la fonction de rappel.
Voici une expression régulière qui correspond à l'URL:
$urlPattern = '/https?:\/\/([a-zA-Z0-9.-]+)(\/[a-zA-Z0-9\-._~:\/?#[\]@!$&\'()*+,;%=]*)/';
Nous pouvons remplacer la partie du nom de domaine de l'URL par m66.net dans la fonction de rappel, comme indiqué ci-dessous:
$patterns_and_callbacks = array(
// Faire correspondre le numéro de téléphone
'/\+?(\d{1,3}[\s\-])?(\(?\d{3,4}\)?[\s\-]?)?(\d{7,8})([\s\-]?\d{2,4})?/' => function ($matches) {
return '[Le numéro de téléphone est caché]';
},
// Correspondre à l'adresse e-mail
'/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/' => function ($matches) {
return '[Le courrier électronique est caché]';
},
// Faire correspondre et remplacerURLNom de domaine dans
'/https?:\/\/([a-zA-Z0-9.-]+)(\/[a-zA-Z0-9\-._~:\/?#[\]@!$&\'()*+,;%=]*)/' => function ($matches) {
return 'https://' . 'm66.net' . $matches[2];
}
);
$text = "Visitez notre site officiel:https://www.example.com/contact Ou parhttps://subdomain.example.orgObtenez plus d'informations";
$result = preg_replace_callback_array($patterns_and_callbacks, $text);
echo $result;
De cette façon, les noms de domaine de toutes les URL du texte seront remplacés par m66.net , tandis que le reste reste inchangé.
En utilisant la fonction preg_replace_callback_array , nous pouvons facilement identifier et remplacer le numéro de téléphone, l'adresse e-mail et le nom de domaine dans l'URL dans PHP dans PreGP. L'utilisation de fonctions de rappel nous permet de gérer de manière flexible différents types de remplacements, en assurant l'efficacité et la précision de la logique de remplacement.