Hướng dẫn preg_quote trong php

Tiếp tục với series học Regular Expression bài này mình sẽ giới thiệu với các bạn về hàm preg_quote() trong PHP.

-Hàm preg_quote() trong PHP có tác dụng trích dẫn các ký tự Regular Expression. Khi sử dụng hàm này thì tất cả các ký tự đặc biệt trong Regular Expression sẽ được thêm ký tự \ phía trước nó.

-Hàm này có tác dụng loại bỏ đi các ký tự đặc biệt ( . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -) trong regex để tránh các trường hợp bị trùng với các ký tự đặc biệt của chuỗi Regex.

Cú pháp:

preg_quote($string, $delimiter);

Trong đó:

  • $string là chuỗi mà các bạn muốn xử lý.
  • $delimiter là các ký tự khác ngoài các ký tự đặc biệt của regex mà bạn muốn thêm \ vào trước. Trường hợp hay được sử dụng nhất là /

2, Các ví dụ.

VD1: Thêm ký tự \ vào trước các ký tự đặc biệt của chuỗi regex trong chuỗi 'Học lập trình (online ^-^) Toidicode.com'.

Kết quả:

Học lập trình \(online \^\-\^\) Toidicode\.com

VD2: Thêm các ký tự \ vào trước các ký tự đặc biệt của chuỗi regex và ký tự / vào trong chuỗi 'Học lập trình ( online )https://toidicodec.com'.

Kết quả:

Học lập trình \( online \)https\:\/\/toidicodec\.com

VD3: Áp dụng hàm preg_quote vào hàm preg_match để xác thực chuỗi.

Kết quả:

Array
(
    [0] => https://toidicodec.com
)

3, Lời kết.

-Như vậy mình đã giới thiệu xong đến mọi người về hàm preg_quote() trong PHP rồi. Hàm này sẽ rất hữu dụng trong một vài trường hợp (như ví dụ 3) nên các bạn chú ý giúp mình.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Bài Viết Mới

Trong bài viết này, bạn sẽ tìm hiểu về hàm preg_quote trong PHP. Hàm preg_quote () trong PHP thêm dấu gạch chéo ngược vào các ký tự có ý nghĩa đặc biệt trong biểu thức chính quy để có thể thực hiện tìm kiếm các ký tự theo nghĩa đen. Hàm này hữu ích khi sử dụng đầu vào của người dùng trong biểu thức chính quy.

cú pháp của hàm PREG_QUOTE trong php là gì?

preg_quote(input, delimiter)

Tham sốMô tả
đầu vào Yêu cầu. Chuỗi được thoát
dấu phân cách Không bắt buộc. Mặc định là vô giá trị. Tham số này mong đợi một ký tự duy nhất cho biết dấu phân cách nào mà biểu thức chính quy sẽ sử dụng. Khi được cung cấp, các phiên bản của ký tự này trong chuỗi đầu vào cũng sẽ được thoát bằng dấu gạch chéo ngược
Phương thức PJP PREG_QUOTE ()

ví dụ về hàm PREG_QUOTE

Ví dụ 1. Trong ví dụ này, chúng tôi sử dụng preg_quote () để sử dụng một cách an toàn các ký tự đặc biệt trong một biểu thức chính quy.

Tiếp tục với series học Regular Expression bài này mình sẽ giới thiệu với các bạn về hàm preg_quote() trong PHP.

-Hàm preg_quote() trong PHP có tác dụng trích dẫn các ký tự Regular Expression. Khi sử dụng hàm này thì tất cả các ký tự đặc biệt trong Regular Expression sẽ được thêm ký tự \ phía trước nó.

-Hàm này có tác dụng loại bỏ đi các ký tự đặc biệt ( . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -) trong regex để tránh các trường hợp bị trùng với các ký tự đặc biệt của chuỗi Regex.

Cú pháp:

preg_quote($string, $delimiter);

Trong đó:

  • $string là chuỗi mà các bạn muốn xử lý.
  • $delimiter là các ký tự khác ngoài các ký tự đặc biệt của regex mà bạn muốn thêm \ vào trước. Trường hợp hay được sử dụng nhất là /

2, Các ví dụ.

VD1: Thêm ký tự \ vào trước các ký tự đặc biệt của chuỗi regex trong chuỗi 'Học lập trình (online ^-^) Toidicode.com'.

Kết quả:

Học lập trình \(online \^\-\^\) Toidicode\.com

VD2: Thêm các ký tự \ vào trước các ký tự đặc biệt của chuỗi regex và ký tự / vào trong chuỗi 'Học lập trình ( online )https://toidicodec.com'.

Kết quả:

Học lập trình \( online \)https\:\/\/toidicodec\.com

VD3: Áp dụng hàm preg_quote vào hàm preg_match để xác thực chuỗi.

Kết quả:

Array
(
    [0] => https://toidicodec.com
)

3, Lời kết.

-Như vậy mình đã giới thiệu xong đến mọi người về hàm preg_quote() trong PHP rồi. Hàm này sẽ rất hữu dụng trong một vài trường hợp (như ví dụ 3) nên các bạn chú ý giúp mình.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Bài Viết Mới

Sử dụng preg_quote để chèn thêm các ký tự đặc biệt cho biểu thức RegExp

Cú pháp hàm preg_quote()

Hàm preg_quote sử dụng để chèn thêm ký tự \ vào phía trước các ký tự được dành cho viết biểu thức RegExp: \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

preg_quote($str)

Ví dụ:


//OUT:
Giá tiền \$50 \(một cái\) Mục lục bài viết

Regular Expression được dùng để xử lý chuỗi thông qua biểu thức riêng của nó. Để các biểu thức này có thể hoạt động được bạn cần tuân thủ nhiêm ngặt theo các quy tắc viêt biểu thức của Regular. Nếu bạn thấy từ khóa Regular Expression có vẻ lạ lẫm thì hãy nhớ đến khái niệm Regex. Regex là viết tắt của Regular Expression, cái mà chúng ta hay nói với nhau hàng ngày trong các dự án. ^^

Khai báo chuỗi

Một chuổi Regex được bắt đầu bằng ký tự "/" và kết thúc cũng bới ký tự "/". Xét một ví dụ đơn giản như sau:

$pattern = '/abc/';
$subject = 'abc';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi $subject có chứa chuỗi $pattern';
}

Trong ví dụ trên, $pattern = '/abc/' có ý nghĩa là tìm trong chuỗi $subject có chứa chuỗi 'abc' hay không. Vì chúng ta truyền vào $subject là 'abc' cho nên kết quả thu được sẽ là thông báo có chứa chuỗi.

So sánh tuyệt đối

Cũng xét ví dụ ở trên, nếu chúng ta truyền vào với giá trị như sau thì điều gì sẽ xảy ra:

$pattern = '/abc/';
$subject = 'mabcdef';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi $subject có chứa chuỗi $pattern';
}

Kết quả trả về vẫn là đúng. Bởi vì tách nhỏ chuỗi $subject ra thì bên trong nó vẫn chứa chuỗi 'abc'.

Vấn đề đặt ra ở đây là: Bây giờ tôi muốn kiểm tra trong $subject trùng khớp với $pattern hay không thì phải làm thế nào?

Trong lập trình, để kiểm tra hai biến có bằng nhau hay không đơn giản chúng ta chỉ cần sử dụng toán tử so sánh '=='. Vậy trong Regex chúng ta phải làm thế nào? Câu trả lời là bạn chỉ cần thêm ký tự '^' và '$' vào đầu và cuối của chuỗi $pattern. Khí đó, khi so sánh sẽ tiến hành so sánh từ đầu tới cuối của chuỗi được truyền vào.

$pattern = '/^framgia$/';
$subject = 'framgia';
if (preg_match($pattern, $subject)){
    echo 'So sánh trùng khớp hoàn toàn';
}

Bây giờ nếu chúng ta thay đổi chuỗi $subject thành 'sframgia01' thì kết quả thu được sẽ là sai.

Phạm vi của chuỗi

Trong nhiều trường hợp, chúng ta cần so sánh một chuỗi ký tự có thuộc một khoảng giá trị bất kỳ nào không. Như là: chuỗi có phải ký tự in thường, ký tự in hoa, có phải là sô, ... Để làm được điều này chúng ta sử dụng 1 trong 2 phương thức sau:

  • [min-max]: min là ký tự bắt đầu. max là ký tự kết thúc
  • [list-char]: với list-char là danh sách các ký tự cho phép.

Ví dụ:

//Kiểm tra chuỗi chỉ là ký tự in thường
$pattern = '/[a-z]/';
$subject = 'abcd';
if (preg_match($pattern, $subject)){
    echo 'true';
}
//Kiểm tra chuỗi chỉ là ký tự in HOA
$pattern = '/[A-Z]/';
$subject = 'ABCDGH';
if (preg_match($pattern, $subject)){
    echo 'true';
}
//Kiểm tra chuỗi chỉ chứa số
$pattern = '/[0-9]/';
$subject = '123678';
if (preg_match($pattern, $subject)){
    echo 'true';
}
//Kiểm tra chuỗi chỉ là ký tự in HOA hoặc in thường
$pattern = '/[A-Za-z]/';
$subject = 'ABCbvnDGH';
if (preg_match($pattern, $subject)){
    echo 'true';
}

Quy định chiều dài cho chuỗi

Để quy định đỗ dài cho chuỗi ta dùng {min,max}. Trong đó, min là chiều dài tối thiểu, max là chiều dài tối đa.

$pattern = '/^[a-z]{5,10}$/';
$subject = 'fdsfdsa';
if (preg_match($pattern, $subject)){
    echo 'True';
}

Với $pattern như ví dụ trên. Kết quả trả về là true chỉ khi nào $subject chỉ chứa các ký tự in thường và có chiều dài từ 5 đến 10 ký tự.

Regex đại diện cho 1 ký tự

Có trường hợp, tối chỉ muốn kiểm tra ký tự cuối cùng xuất hiện trong chuỗi còn những ký tự trước nó không giới hạn phạm vi thì phải viết Regex như thế nào? Regex cung cấp cho chúng ta ký tự '.'. Với ký tự này được khai báo, Regex sẽ chấp nhận bất cứ ký tự nào đc khai báo.

// Pattern là ký tự bất kỳ dài từ 3 đến 10 ký tự
$pattern = '/^.{3,10}$/';
$subject = '3232';
if (preg_match($pattern, $subject)){
    echo 'True';
}

Regex với ký hiệu đặc biệt

Giả sử tối muốn kiểm tra chuỗi có chứa dấu . hay không. Nếu cứ làm như trước đây. Chúng ta có:

$pattern = '/./';
$subject = 'demo';
if (preg_match($pattern, $subject)){
    echo 'True';
}

Kết quả của chương trình này sẽ là True. Bởi vì Regex hiểu dấu . là chấp nhận bất kỳ giá trị nào chứ không phải là yêu cầu kiểm tra trong chuỗi có dấu . hay không. Khi gặp những tình huống tương tự như trên. Hay làm như sau:

$partern = '/\./';
$subject = 'demo';
if (preg_match($partern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Kết quả của chương trình này là false. Vì trong chuỗi $subject không có chứa ký tự '.'.

Regex với Or

Muốn kiểm tra chuỗi có ký tự A hoặc ký tự B hay không thì làm như sau:

$pattern = '/^A|B$/';
$subject = 'A';
if (preg_match($pattern, $subject)){
    echo 'Chuỗi regex so khớp';
}

Regex với chiều dài không giới hạn

Ta đã biết được muốn xác định chiều dài cho chuỗi thì dùng {min, max}. Tuy nhiên vẫn còn một số cách ngắn gọn hơn nhiều.

  • Ký tự *: Đại diện cho ký tự null và nhiều ký tự
$pattern = '/[a-z]*/';
$subject = 'dsada';
if (preg_match($pattern, $subject)){
    echo 'True';
}
  • Ký tự +: Đại diện cho một hoặc nhiều ký tự
// chuỗi ít nhất có 1 ký tự chữ thường
$pattern = '/[a-z]+/';
$subject = 's';
if (preg_match($pattern, $subject)){
    echo 'True';
}
  • Ký tự ?: Đại diện cho một hoặc không có ký tự nào
// chuỗi có 1 hoặc không có ký tự thường nào
$pattern = '/[a-z]?/';
$subject = 's';
if (preg_match($pattern, $subject)){
    echo 'True';
}

Các ký tự Regex đặc biệt

Danh sách các ký tự Regex đặc biệt như sau:

  • \d : Chữ số bất kỳ ~ [0-9]
  • \D : Ký tự bất kỳ không phải là chữ số (ngược với \d) ~ [^0-9]
  • \w : Ký tự từ a-z, A-Z, hoặc 0-9 ~ [a-zA-Z0-9]
  • \W : Ngược lại với \w (nghĩa là các ký tự không thuộc các khoảng: a-z, A-Z, hoặc 0-9) ~[^a-zA-Z0-9]
  • \s : Khoảng trắng (space)
  • \S : Ký tự bất kỳ không phải là khoảng trắng.

Website kiểm tra Regex online

Không phải lúc nào chúng ta cần kiểm tra một Regex cũng lại mở code ra gõ lệnh rồi chạy chương trình chờ kết quả trả về. Việc này rất mất thời gian mà lại không cần thiết. Các bạn có thể tìm kiếm một trang kiểm tra regex bất kỳ nào trên google. Có rất nhiều để các bạn lựa chọn.

Mình xin giới thiệu Regex online!. Đây là trang mình hay sử dụng nhất. Hãy nhập regex vào ô Regular Expression. Sau khi hoàn thành regex thì hãy nhập chuỗi cần kiểm tra vào ô Test String.

Giao diện chính của trang này:

Chúc mọi người thành công khi làm việc với Regex. ^^