Liên hệ
lập trình php

Hàm preg_match, preg_match_all trong PHP

Sử dụng hàm preg_match và hàm preg_match_all để thi hành tìm kiếm theo biểu thức chính quy RegExp

Cú pháp hàm preg_match()

Hàm preg_match thi hành tìm theo biểu thức RegExp (xem cách viết biểu thức chính quy RegExp), cú pháp như sau

preg_match($pattern , $subject [,&$matches])

Hàm này tìm trong $subject các chuỗi con phù hợp với mẫu $pattern là một biểu thức RegExp. Hàm trả về 1 nếu tìm thấy, 0 nếu không thấy, FALSE nếu lỗi

  • $pattern : Biểu thức RegExp để tìm kiếm. Viết biểu thức chính quy RegExp, trong PHP các hàm sử dụng RegExp thường các biểu thức này nằm trong cặp /../
  • $subject : Chuỗi nhập vào để tìm kiếm
  • $matches : Nếu có thì biến này dùng để lưu trữ kết quả tìm kiếm, nó là một mảng $matches[0] lưu kết quả đầy đủ tìm thấy, $matches[1] là kết quả phù hợp với mẫu con thứ nhất, ...

Để trả về tất cả các kết quả dùng hàm preg_match_all

preg_match_all($pattern , $subject [,&$matches])

Ví dụ hàm preg_match()

Kiểm tra Email

Ví dụ nhập địa chỉ emai, kiểm tra xem địa chỉ đó có kết thúc bởi .net hay không. Nếu thấy in ra kết quả tìm kiếm đầy đủ


<?php
    $email_id = "admin@xuanthulab.net";
    $pattern = "/(\.)(net$)/";

    $retval = preg_match($pattern, $email_id);
    $retval = preg_match($pattern, $email_id, $matches);

    if( $retval == 1 )
    {
        echo "Có dạng .net, kết quả là: = ". $matches[0];
    }
    else
    {
        echo "Không thấy .net";
    }
?>

//OUT: Có dạng .net, kết quả là: = .net

Tìm địa chỉ URL trong chuỗi với preg_match_all


<?php
$text = 'Đây là địa chỉ website của tôi https://xuanthulab.net, 
đọc trang https://xuanthulab.net/lap-trinh-php/ để xem tôi viết về PHP..';

preg_match_all("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/",$text, $out);

foreach($out[0] as $varr){
    echo $varr.'<br>';
    }
?>

//OUT:
https://xuanthulab.net
https://xuanthulab.net/lap-trinh-php/
 

Lấy tên host (domain) từ URL với preg_match


<?
$url        = 'https://www.xuanthulab.net/bieu-thuc-chinh-quy-regexp.html';
$pattern    = '/^(https:\/\/|http:\/\/)?([^\/]+)/i';
preg_match( $pattern, $url, $matches );
$host = $matches[2];
echo "Host name is: " . $host;
echo "<br />";


preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "Domain name is: " . $matches[0];

?>
//OUT:
Host name is: www.xuanthulab.net
Domain name is: xuanthulab.net

 

Kiểm tra URL có đúng định dạng với preg_match


<?
function get_valid_url( $url ) {

    $regex = "((https?|ftp)\:\/\/)?"; // Scheme
    $regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass
    $regex .= "([a-z0-9-.]*)\.([a-z]{2,3})"; // Host or IP
    $regex .= "(\:[0-9]{2,5})?"; // Port
    $regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path
    $regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // GET Query
    $regex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?"; // Anchor

    return preg_match("/^$regex$/", $url);

}

$url = "https://xuanthulab.net/server/";

if( get_valid_url( $url ) ) {
    echo "URL đúng chuẩn: " . $url;
}

else {
    echo "URL sai: " . $url;
}
?>
 

Kiểm tra password

Kiểm tra passwod phải là chữ hoặc số, dài từ 8 đến 16 ký tự.

 
<?
    $password = "abc";

    if (! preg_match("/[[:alnum:]]{8,16}/i", $password))
    {
        print "Password không đúng! Phải có độ dài 8 - 16 ký tự";
    }
    else
    {
        print "Valid password";
    }
?>

 

Vui lòng đăng ký ủng hộ kênh