Hướng dẫn php ereg - ví dụ php



Cú pháp

Cú pháp của hàm ereg() trong PHP như sau:

int ereg(string chuỗi_cần_tìm, string chuỗi_ban_đầu, [array regs]);

Định nghĩa và cách sử dụng

Hàm ereg() trong PHP tìm kiếm một chuỗi được xác định bởi string cho một chuỗi được xác định bởi chuỗi_cần_tìm, trả về true nếu chuỗi_cần_tìm được tìm thấy, nếu không là false. Việc tìm kiếm là phân biệt kiểu chữ.

Tham số regs tùy ý chứa một mảng các biểu thức được so khớp mà được nhóm bởi các dấu ngoặc đơn trong Regular Expression.

Trả về giá trị

  • Nó trả về true nếu chuỗi_cần_tìm được tìm thấy, nếu không là false.

Quảng cáo

Ví dụ

Dưới đây là ví dụ minh họa về hàm ereg() trong PHP, bạn sao chép và dán ví dụ này vào trong một file và kiểm tra kết quả:

";
   }
   else
   {
      echo "Không tìm thấy chuỗi .com
"; } $retval = ereg(("(\.)(com$)"), $email_id, $regs); if( $retval == true ) { echo "Tìm thấy chuỗi .com và tham số regs = ". $regs[0]; } else { echo "Không tìm thấy chuỗi .com"; } ?>

Lưu chương trình trên trong một file có tên là test.php trong htdocs, sau đó mở trình duyệt và gõ địa chỉ http://localhost:8080/test.php sẽ cho kết quả:test.php trong htdocs, sau đó mở trình duyệt và gõ địa chỉ http://localhost:8080/test.php sẽ cho kết quả:

Hiện tại, hàm ereg() là đã cũ và người ta rất ít sử dụng hàm này và bạn nên sử dụng hàm preg_match để thay thế. Vì vậy khi chạy trong bất kỳ trình duyệt nào, bạn sẽ nhận được một lời cảnh báo như sau: Deprecated: Function ereg() is deprecated in ...ereg() là đã cũ và người ta rất ít sử dụng hàm này và bạn nên sử dụng hàm preg_match để thay thế. Vì vậy khi chạy trong bất kỳ trình duyệt nào, bạn sẽ nhận được một lời cảnh báo như sau: Deprecated: Function ereg() is deprecated in ...

Hướng dẫn php ereg - ví dụ php

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Hướng dẫn php ereg - ví dụ php

Hướng dẫn php ereg - ví dụ php

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn ở Hà Nội có thể tham gia khóa học thứ 9 của vietjackteam (đang tuyển sinh) vào cuối tháng 10/2018 do anh Nguyễn Thanh Tuyền, admin vietjack.com trực tiếp giảng dạy tại Hà Nội. Chi tiết nội dung khóa học tham khỏa link : Khóa học Java.Các bạn học CNTT, điện tử viễn thông, đa phương tiện, điện-điện tử, toán tin có thể theo học khóa này. Số lượng các công việc Java hoặc .NET luôn gấp ít nhất 3 lần Android hoặc iOS trên thị trường tuyển dụng. Khóa online= Đi phỏng vấn, Khóa offline= Đi phỏng vấn+ 1.5 tháng thực tập ngoài doanh nghiệp. (đang tuyển sinh) vào cuối tháng 10/2018 do anh Nguyễn Thanh Tuyền, admin vietjack.com trực tiếp giảng dạy tại Hà Nội. Chi tiết nội dung khóa học tham khỏa link : Khóa học Java.Các bạn học CNTT, điện tử viễn thông, đa phương tiện, điện-điện tử, toán tin có thể theo học khóa này. Số lượng các công việc Java hoặc .NET luôn gấp ít nhất 3 lần Android hoặc iOS trên thị trường tuyển dụng. Khóa online= Đi phỏng vấn, Khóa offline= Đi phỏng vấn+ 1.5 tháng thực tập ngoài doanh nghiệp.

Mọi người có thể xem demo nội dung khóa học tại địa chỉ Video demo khóa học OfflineVideo demo khóa học Offline

Các bạn ở xa học không có điều kiện thời gian có thể tham dự khóa Java online để chủ động cho việc học tập. Từ tháng 4/2018, VietJack khuyến mại giá SỐC chỉ còn 250k cho khóa học, các bạn có thể trả lại tiền nếu không hài lòng về chất lượng trong 1 tháng, liên hệ facebook admin fb.com/tuyen.vietjack để thanh toán chuyển khoản hoặc thẻ điện thoại, khóa học bằng Tiếng Việt với gần 100 video, các bạn có thể chủ động bất cứ lúc nào, và xem mãi mãi. Thông tin khóa học tại Khóa học Java Online trên Udemy các bạn có thể trả lại tiền nếu không hài lòng về chất lượng trong 1 tháng, liên hệ facebook admin fb.com/tuyen.vietjack để thanh toán chuyển khoản hoặc thẻ điện thoại, khóa học bằng Tiếng Việt với gần 100 video, các bạn có thể chủ động bất cứ lúc nào, và xem mãi mãi. Thông tin khóa học tại Khóa học Java Online trên Udemy

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Các bài học PHP phổ biến khác tại VietJack::

  • PHP - Cú pháp
  • PHP - Các kiểu biến
  • PHP - Hằng (Constant)
  • PHP - Toán tử
  • PHP - Lệnh if, else, switch

regular_expression_trong_php.jsp



Bài viết liên quan

  • 160 bài học ngữ pháp tiếng Anh hay nhất

  • 155 bài học Java tiếng Việt hay nhất

  • 100 bài học Android tiếng Việt hay nhất

  • 247 bài học CSS tiếng Việt hay nhất

  • 197 thẻ HTML cơ bản

  • 297 bài học PHP

  • 101 bài học C++ hay nhất

  • 97 bài tập C++ có giải hay nhất

  • 208 bài học Javascript có giải hay nhấ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: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?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.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.

";
   }
   else
   {
      echo "Không tìm thấy chuỗi .com
"; } $retval = ereg(("(\.)(com$)"), $email_id, $regs); if( $retval == true ) { echo "Tìm thấy chuỗi .com và tham số regs = ". $regs[0]; } else { echo "Không tìm thấy chuỗi .com"; } ?>
0

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ó:

";
   }
   else
   {
      echo "Không tìm thấy chuỗi .com
"; } $retval = ereg(("(\.)(com$)"), $email_id, $regs); if( $retval == true ) { echo "Tìm thấy chuỗi .com và tham số regs = ". $regs[0]; } else { echo "Không tìm thấy chuỗi .com"; } ?>
1

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:

";
   }
   else
   {
      echo "Không tìm thấy chuỗi .com
"; } $retval = ereg(("(\.)(com$)"), $email_id, $regs); if( $retval == true ) { echo "Tìm thấy chuỗi .com và tham số regs = ". $regs[0]; } else { echo "Không tìm thấy chuỗi .com"; } ?>
2

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:

";
   }
   else
   {
      echo "Không tìm thấy chuỗi .com
"; } $retval = ereg(("(\.)(com$)"), $email_id, $regs); if( $retval == true ) { echo "Tìm thấy chuỗi .com và tham số regs = ". $regs[0]; } else { echo "Không tìm thấy chuỗi .com"; } ?>
3

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ự
";
   }
   else
   {
      echo "Không tìm thấy chuỗi .com
"; } $retval = ereg(("(\.)(com$)"), $email_id, $regs); if( $retval == true ) { echo "Tìm thấy chuỗi .com và tham số regs = ". $regs[0]; } else { echo "Không tìm thấy chuỗi .com"; } ?>
4
  • Ký tự +: Đại diện cho một hoặc nhiều ký tự
";
   }
   else
   {
      echo "Không tìm thấy chuỗi .com
"; } $retval = ereg(("(\.)(com$)"), $email_id, $regs); if( $retval == true ) { echo "Tìm thấy chuỗi .com và tham số regs = ". $regs[0]; } else { echo "Không tìm thấy chuỗi .com"; } ?>
5
  • Ký tự ?: Đại diện cho một hoặc không có ký tự nào
";
   }
   else
   {
      echo "Không tìm thấy chuỗi .com
"; } $retval = ereg(("(\.)(com$)"), $email_id, $regs); if( $retval == true ) { echo "Tìm thấy chuỗi .com và tham số regs = ". $regs[0]; } else { echo "Không tìm thấy chuỗi .com"; } ?>
6

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:

Hướng dẫn php ereg - ví dụ php

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