Tạo và sử dụng biểu thức chính quySo khớp các ký tự Sử dụng lớp ký tự Tạo chuỗi mẫu pattern Sử dụng xác nhận trước look-ahead assertion Sử dụng biểu thức chính quy nhiều dòng Sử dụng biể
Trang 1Bài 3
Một số kỹ thuật lập trình PHP nâng cao
Trang 2Cách tạo một biểu thức chính quy và xử lý bằng hàm preg_match
Cách sử dụng biểu thức chính quy nhiều dòng,
toàn cục
Cách sử dụng hàm preg_replace và preg_split
để làm việc với biểu thức chính quy
Cơ chế sử dụng biểu thức chính quy trong xác
Trang 3Tạo và sử dụng biểu thức chính quy
So khớp các ký tự
Sử dụng lớp ký tự
Tạo chuỗi mẫu (pattern)
Sử dụng xác nhận trước (look-ahead assertion)
Sử dụng biểu thức chính quy nhiều dòng
Sử dụng biểu thức chính quy toàn cục
Thay thế biểu thức chính quy bằng một xâu
Làm việc với biểu thức chính quy
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 3
Trang 4Hàm so khớp biểu thức chính quy:
Cách tạo một biểu thức chính quy:
Hai xâu để kiểm tra:
$author = 'Ray Harris';
$editor = 'Joel Murach';
$author_match = preg_match($pattern, $author);
$editor_match = preg_match($pattern, $editor);
Trang 5Kiểm tra lỗi trong biểu thức chính quy
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 5
Trang 6Một biểu thức chính quy không phân biệt chữ
hoa hay chữ thường:
Cách sử dụng:
Biểu thức chính quy không phân biệt chữ hoa hay thường
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 6
$pattern = '/murach/i';
$editor = 'Joel Murach';
$editor_match = preg_match($pattern, $editor);
Trang 7Khái niệm biểu thức chính quy (regular
expression)
Khái niệm chuỗi mẫu (pattern)
Chuỗi mẫu cho các ký tự đặc biệt:
Chuỗi mẫu (pattern)
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 7
Trang 8So khớp các ký tự đặc biệt
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 8
$string = "© 2010 Mike's Music \ All rights reserved
Trang 9Chuỗi mẫu Ý nghĩa
Bất kỳ ký tự đơn nào ngoại trừ ký tự dòng mới
\w Bất kỳ chữ cái, số và dấu _
\W Bất kỳ ký tự nào ngoại trừ chữ cái, số và dấu _
\D Bất kỳ ký tự nào ngoại trừ chữ số
\s Bất kỳ khoảng trắng nào (tab, dấu cách, dòng mới, …)
\S Bất kỳ ký tự nào ngoại trừ khoảng trắng
Chuỗi mẫu cho các loại ký tự
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 9
Trang 10Các loại ký tự so khớp
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 10
$string = 'The product code is MBT-3461';
Trang 11Sử dụng lớp ký tự
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 11
$string = 'The product code is MBT-3461';
Trang 12Sử dụng các siêu ký tự (metacharacter)
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 12
Trang 14Chuỗi mẫu Ý nghĩa
\b Bắt đầu hoặc kết thúc một từ (không nằm trong ngoặc)
\B Vị trí không phải là bắt đầu hoặc kết thúc một từ
Chuỗi mẫu cho vị trí xâu
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 14
Trang 15So khớp vị trí xâu
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 15
$string = 'Ray Harris';
Trang 16So khớp chuỗi mẫu con
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 16
$name = 'Rob Rebertson';
preg_match('/^(Rob)|(Bob)b/', $name);
//Trả về 1
preg_match('/^(\w\w\w) \1/', $name);
//Trả về 1
Trang 17So khớp các chuỗi mẫu lặp lại
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 17
Trang 18Các xác nhận trước:
Ví dụ:
Xác nhận trước (Look-ahead assertion)
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 18
Trang 19Xác nhận trước đảo ngược
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 19
Trang 20(?=.*[[:punct:]]) //Ít nhất một dấu câu
[[:print:]]{6,} //Ít nhất sáu ký tự in được
Trang 22Biểu thức chính quy nhiều dòng
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 22
$string = "Ray Harris\nAuthor";
Trang 23Biểu thức chính quy toàn cục
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 23
$string = "MBT_6745 MBT-5712";
$pattern = '/MBT-[[:digit:]]{4}';
$count = preg_match_all($pattern, $string, $matches);
//Count có giá trị 2
foreach ($matches[0] as $match) {
echo '<div>' $match '</div>';
//Hiển thị MBT-6745 và MBT-5712 }
Trang 24Sử dụng hàm preg_place để thay thế một chuỗi mẫu với một xâu:
Hàm preg_replace
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 24
$items = 'MBT-6745 MBS-5729';
$items = preg_replace('/MB[ST]/', 'ITEM’, $items);
echo $items; // Hiển thị ITEM-6745 ITEM-5729
Trang 25Sử dụng hàm preg_split để tách một chuỗi dựa trên mẫu so khớp:
foreach ($items as $item) {
echo '<li>' $item '</li>';
}
Trang 26Các biểu thức chính quy dùng để kiểm tra tính hợp lệ
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 26
//Số điện thoại với định dạng: 999-999-9999
Trang 28Xác thực ngày với một thành phần không hợp lệ
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 28
$date = '8/10/209'; //Ngày không hợp lệ
$date_pattern = '/^(0?[1-9]|1[0-2])\/'
9]|[12][[:digit:]]|3[01])\/'
'(0?[1-.'[[:digit:]]{4}$/';
$match = preg match($date pattern, $date); // Trả về 0
Trang 29Xác thực địa chỉ email đầy đủ
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 29
function valid_email ($email) {
$parts = explode(“@”, $email);
if (count($parts) != 2 ) return false;
if ( strlen ($parts[0]) > 64) return false;
if ( strlen ($parts[1]) > 255) return false;
$local_part = '/' $address '|' $quoted '/';
$local_match = preg_match($local_part, $parts[0]);
if ($local_match === false || $local_match != 1) return
false;
Trang 30Xác thực địa chỉ email đầy đủ
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 30
$hostname =
'([[:alnum:]]([-[:alnum:]]{0,62}[[:alnum:]])?)';
$hostnames = '(' $hostname '(\-' $hostname ')*)';
$top = '\.[[:alnum:]]{2,6}';
$domain_part = '/^' $hostnames $top '$/';
$domain_match = preg_match($domain_part, $parts[1]);
if ($domain_match === false || $domain_match != 1) return false;
return true;
Trang 32Cú pháp câu lệnh tạo ngoại lệ mới:
Cú pháp câu lệnh ném ngoại lệ:
Ngoại lệ (Exception)
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 32
new Exception ($message [, $code])
throw $exception
Trang 33Hàm có thể ném ra một ngoại lệ:
Ngoại lệ
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 33
function calculate_future_value ($investment,
for ($i = 1; $i <= $years; $i++) {
$future_value =($future_value + ($future_value
* $interest_rate * 01));
}
return round ($futureValue, 2);
}
Trang 34Câu lệnh sẽ kích hoạt việc ném ngoại lệ:
Ngoại lệ
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 34
$futureValue = calculate_future_value(10000, 0.06, 0); // Ném ngoại lệ
Trang 35Phương thức Giải thích
getMessage() Trả về thông báo được truyền vào cho Exception
getCode() Trả về mã lỗi được truyền vào cho Exception
getFile() Trả về file mà trong đó Exception đã được ném ra
getLine() Trả về dòng mã nơi Exception được ném ra
getTrace() Trả về mảng chứa ngăn xếp dò dấu cho đối tượng Exception getTraceAsString() Trả về chuỗi chứa ngăn xếp dò dấu cho đối tượng Exception
Phương thức của đối tượng Exception
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 35
Trang 36catch ( ExceptionClass $exceptionName) { statements }
[ catch ( ExceptionClass $exceptionName) { statements } ]
try {
$fv = calculate_future_value(10000, 0.06, 0);
//Ném lỗi
echo 'Future value was calculated successfully.';
} catch ( Exception $e) {
echo 'Error: ' $e-> getMessage ();
}
Trang 37Câu lệnh try-catch ném lại một đối tượng ngoại lệ:
} catch ( Exception $e) {
// làm gì đó trước khi ném ngoại lệ
throw $e;
}
Trang 38Câu lệnh try - catch bắt hai kiểu ngoại lệ:
echo 'PDOException: ' $e-> getMessage ();
} catch ( Exception $e) {
echo 'Exception: ' $e-> getMessage ();
}
Trang 39Biểu thức chính quy định nghĩa một chuỗi mẫu
được dùng để tìm kiếm trong một chuỗi
Xác nhận trước là kiểu xác nhận đặc biệt yêu
cầu chuỗi mẫu con cần được so khớp để cả
chuỗi mẫu được so khớp
Sử dụng câu lệnh throw để ném một đối tượng Exception (ngoại lệ)
Sử dụng câu lệnh try-catch để bắt bất kỳ ngoại
lệ nào được ném ra
Tổng kết bài học
Bài 3 - Một số kỹ thuật lập trình PHP nâng cao 39