Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

PHP – ฟังก์ชัน mb_ereg_replace_callback() แทนที่ Regex ด้วย Callback รองรับ Multibyte

ฟังก์ชัน mb_ereg_replace_callback() ใช้ค้นหาและแทนที่ regular expression ด้วยการรองรับ multibyte โดยใช้ callback function ฟังก์ชันจะสแกนสตริงจับคู่กับ pattern แล้วแทนที่ด้วยผลลัพธ์จาก callback คล้ายกับ mb_ereg_replace() แต่ใช้ callback แทน replacement string ตรงๆ รองรับตั้งแต่ PHP 5.4 ขึ้นไป

รูปแบบการใช้งาน (Syntax)

string mb_ereg_replace_callback(string $pattern, callable $callback, string $string, string $options = "")

พารามิเตอร์

  • $pattern – Regular expression pattern (รองรับ multibyte)
  • $callback – ฟังก์ชัน callback ที่รับ array ของ matched elements และคืนค่า replacement string
  • $string – สตริงที่ต้องการค้นหาและแทนที่
  • $options – ตัวเลือกการค้นหา

หมายเหตุ: สามารถใช้ anonymous function (closure) ประกาศ callback ภายในการเรียก mb_ereg_replace_callback() ได้ ทำให้โค้ดสะอาดและไม่ปนเป้อน namespace

ค่าที่คืนกลับ

คืนค่าสตริงที่แทนที่แล้วเมื่อสำเร็จ คืน false หากเกิดข้อผิดพลาด คืน null หากสตริงไม่ถูกต้องสำหรับ encoding ปัจจุบัน

ตัวอย่าง 1: ใช้ Named Function

<?php
$result = "April Fools day is 04/01/2019\n";
$result .= "Next match is 12/24/2021\n";

function next_year($matches) {
    return $matches[1] . ($matches[2] + 1);
}

echo mb_ereg_replace_callback(
    "(\d{2}/\d{2}/)(\d{4})",
    "next_year",
    $result
);
?>

ผลลัพธ์

April Fools day is 04/01/2020
Next match is 12/24/2022

ตัวอย่าง 2: ใช้ Anonymous Function

<?php
$result = "April Fools day is 04/01/2019\n";
$result .= "Next match is 12/24/2021\n";

echo mb_ereg_replace_callback(
    "(\d{2}/\d{2}/)(\d{4})",
    function ($matches) {
        return $matches[1] . ($matches[2] + 1);
    },
    $result
);
?>

ผลลัพธ์

April fools day is 04/01/2020
Next match is 12/24/2022

หมายเหตุ: ในตัวอย่างที่ 2 ใช้ anonymous function แทน named function แตผลลัพธ์เหมือนกัน