Categories PHP-MySQL

Câu lệnh Regex để nhận biết các ký tự chú thích cuối tên và dùng PHP để xử lý

Dữ liệu thu thập có thể có những tên như thế này: Hàm PHP phát hiện các ký tự lạ trong họ tên người Việt Nam (v1.2)

Nguyễn Đức Anh/b
Nguyễn Đức Anh (mb)
Nguyễn Đức Anh (hn)
Nguyễn Đức Anh (hsdb)
Nguyễn Đức Anh - b
Nguyễn Đức Anh.b
Nguyễn Đức Anh -b
Nguyễn Đức Anh-b
Nguyễn Đức a
Nguyễn Đức Anh b
Nguyễn Đức Anh (a)
Nguyễn Đức Anh (b)
Nguyễn Đức Anh (a
Nguyễn Đức Anh (b
Nguyễn Đức Anh (b
Nguyễn Đức Anha)
Nguyễn Đức Anh(b)
Nguyễn Đức Anh (a )
Nguyễn Đức Anh ( c)
Nguyễn Đức Anh1
Nguyễn Đức Anh2
Nguyễn Đức Anh 1
Nguyễn Đức Anh 2
Nguyễn Đức Anh (1)
Nguyễn Đức Anh (21)

Đây là các chú thích phổ biến khi mà trong danh sách có những người cùng tên để phân biệt người nọ với người kia (ví dụ trong lớp học, trong nhóm ngoại khóa, vân vân) hoặc để bổ sung thông tin đặc biệt cho tên.

Nhiệm vụ của chúng ta là nhận biết các ký tự dư và loại bỏ nó đi. Câu lệnh regex (biểu thức chính quy) để làm điều này là:

$pt='/(\(\s*)[abcd|\d](\s*\)*)$|\d$|\s+[abcd]$|[abcd]\)|\([a-z]+\)$|[\-,.\/]\s*[abcd]$|\(\d{1,}\)$/';

Bạn có thể thay abcd bằng ABCD nếu mẫu của bạn là dạng viết hoa như kiểu Nguyễn Đức Anh (A)

Tiếp đến chúng ta sẽ dùng lệnh preg_match để so khớp với mẫu tìm kiếm, và lệnh preg_replace để xóa các ký tự không cần thiết này:

if (preg_match($pt, $tencu)) {
    $tenmoi = preg_replace($pt, '', $tencu);
    echo "Họ tên cũ: <strong>".$tencu."</strong> "."Họ tên mới: <strong>".$tenmoi."</strong>";
    echo "</br>";
}

Tiếp theo chúng ta cần xuất nó ra màn hình để xem có trường hợp ngoại lệ nào không trước khi thực hiện can thiệp dữ liệu thực sự. Ví dụ, trường hợp trên sẽ không chính xác với tên người chỉ có một ký tự. Ví dụ Nguyễn Đức A, tuy nhiên trường hợp này thì cực kỳ hiếm, nên mã regex trên có thể nói là giải quyết được vấn đề liên quan đến các chú thích cuối tên.

PS: một mẹo để sử dụng regex tốt là test trước nó, ổn rồi bạn mới copy lệnh vào PHP (trong PHP thì bạn đưa nó vào giữa hai dấu '/regex đặt ở đây/'). Cách dễ nhất là bạn dùng trang Regex101. Bạn có thể xem mã lệnh tôi vừa dùng lưu trên trang đó.

kiểm tra trước câu lệnh regex
Back to Top