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는 모든 일치하는 모든 전화 번호를 [전화 번호 Hidden] 으로 자동 교체합니다.
다음으로 텍스트에서 이메일 주소를 처리해야합니다. 사서함의 일반적인 형식에는 다음이 포함됩니다.
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;
이 예에서는 콜백 함수를 통해 일치하는 사서함을 교체하여 [Mailbox 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 함수를 사용하면 PREGP의 PHP의 URL에서 전화 번호, 이메일 주소 및 도메인 이름을 쉽게 식별하고 교체 할 수 있습니다. 콜백 함수를 사용하면 다양한 유형의 교체품을 유연하게 처리하여 교체 로직의 효율성과 정확성을 보장 할 수 있습니다.