ບົດທີ 9 Regular Expression

Regular Expression ​ເປັນ​ການ​ປະມວນ​ຜົນ​ຂໍ້​ມູນ​ໃນ​ລະດັບ​ຕົວ​ອັກສອນ ຫລື ຂໍ້ຄວາມ,​ການ​ໃຊ້ Regular Expression ​​ແມ່ນ​ເພື່ອ​ກວດ​ສອບ​ຂໍ້​ມູນ​ວ່າ​ມີ​ຮູບ​ແບບ​ຖືກຕ້ອງ​ຕາມ​ທີ່​ກຳນົດ​ໄວ້ຫລື ​ບໍ່ ​ເຊັ່ນ ກວດ​ສອບ​ຈາກ​ການ​ປ້ອນ​ຂໍ້​ມູນ​​ໃນ​ແບບ​ຟອມ ​ເປັນ​ຕົ້ນ ຊື່,ລະຫັດ,ທີ່ຢູ່​ອີ​ເມລ ​​ໂດຍ​ສະ​ເພາະ​ຮູບ​ແບບ​ທີ່​ຖືກຕ້ອງ​ຂອງ​ທີ່ຢູ່​ອີ​ເມລຈະ​ຕ້ອງ​ມີ​ເຄື່ອງໝາຍ @ ​,ນອກຈາກ​ນັ້ນ​ຍັງ​ສາມາດ​ໃຊ້​​ແທນ​ຂໍ້​ມູນ​ທີ່​ມີ​ປະລິມານ​ຫລາຍ​ດ້ວຍ​ ຂໍ້ຄວາມ ຫລື ຕົວ​ອັກສອນ​ໃດໆ.
9.1 Meta-Character.
​ແມ່ນ​ສັນຍາ​ລັກ​ທີ່​ໃຊ້​ໃນ​ການ​ກຳນົດ​ຮູບ​ແບບ​ຂອງ ​ຂໍ້ຄວາມ​ ຫລື ຕົວ​ອັກສອນ ​ເພື່ອ​ໃຊ້​ໃນ​ການ​ຄົ້ນ​ຫາ,​ແທນ​ທີ່ ຫລື ປຽບທຽບ​ຂໍ້ຄວາມ​ຊະນິດ​ສະຕຣິງ ສັນຍາ​ລັກ​ທີ່​ໃຊ້​ມີ​ດັ່ງ​ນີ້:
\   ​ໃຊ້​ວາງ​ຢູທາງ​ໜ້າຕົວ​ອັກສອນ​ພິ​ເສດ​ເພື່ອ​ໝາຍ​ເຖິງ​ຕົວ​ອັກ​ສອນ​ນັ້ນໆ​ຄື: $, ’ , ” ,\ , / , [ ​ແລະ  ]
^   ​ໃຊ້​ກຳນົດ​ຕຳ​ແໜ່​ງ​ເລີ່​ມຕົ້ນ​ຂອງ​ຂໍ້ຄວາມ
$   ​ໃຊ້​ກຳນົດ​ຕຳ​ແໜ່​ງສຸດ​ທ້າ​ຍຂອງ​ຂໍ້ຄວາມ
.    ໝາຍ​ເຖິງ​ຕົວ​ອັກສອນ​ໃດໆ​ກໍ່​ໄດ້​ຈຳນວນ 1 ຕົວ​ອັກສອນ ຍົກ​ເວັ້ນການ​ຕັ້ງ​ແຖວ​ໃໝ່
[ ]  ຄຳ ຫລື ກຸ່ມ​ຄຳ​ທີ່​ຕ້ອງການ​ໃຫ້​ມີ​ໃນ​ຂໍ້ຄວາມ
|    ​ໃຊ້​ເປັນ​ຕົວ​ຂັ້ນ​ລະຫວ່າງ​ຂໍ້​ມູນ ​ໃນ​ກໍລະນີ​ທີ່​ມີ​ຕົວ​ເລືອກ​ຫລາຍ​ຕົວ
( )   ​ໃຊ້​ສຳ​ລັບ​ຈັດ​ກຸ່ມ​ຕົວ​ອັກສອນ​ເຂົ້າ​ດ້ວຍ​ກັນ ຫລື ກຳນົດ​ກຸ່ມ​ຂອງ​ຮູບ​ແບບ​ຍ່ອຍ
?    ​ໃຊ້​ກຳນົດ​ວ່າ ຕ້ອງ​ມີ​ຕົວ​ອັກສອນ​ນັ້ນ 1 ຕົວ​ຫລືບໍ່ມີ​ເລີຍ
*    ​ໃຊ້​ກຳນົດ​ວ່າ​ຈະ​ມີ​ຕົວ​ອັກສອນ​ເທົ່າ​ໃດ​ຕົວ​ກໍ່​ໄດ້ ຫລື ບໍ່ມີ​ເລີຍ
+    ​ໃຊ້​ກຳນົດ​ວ່າ ຕ້ອງ​ມີ​ຕົວ​ອັກສອນ​ຍ່າງ​ນ້ອຍ 1 ຕົວ ຫລື ບໍ່​ມີ​ເລີຍ​ກໍ່​ໄດ້
{n,m} ​ໃຊ້​ກຳນົດ​ຈຳນວນ​ຄັ້ງ​ຂອງ​ຂໍ້ຄວາມ ​ໂດຍ n ​ແມ່ນ​ຈຳນວນ​ນ້ອຍ​ທີ່​ສຸດ​ທີ່​ຕ້ອງການ ​ແລະ m ​ແມ່ນ​ຈຳນວນ​ຫລາຍ​ທີ່​ສຸດ​ທີ່​ຕ້ອງການ.

ຕົວຢ່າງ1: 
ການ​ສ້າງ​ຮູບ​ແບບ​ຂອງ​ຂໍ້ຄວາມ​ຈາກ Meta-Character
[a-z]   ກວດ​ສອບ​ວ່າ​​​​ແມ່ນ​ຕົວ​ອັກສອນ a ​ເຖິງ z ຫລື​ບໍ່
[A-Z]  ກວດ​ສອບ​ວ່າ​​​​ແມ່ນ​ຕົວ​ອັກສອນ A ​ເຖິງ Z ຫລື​ບໍ່
[a-zA-Z] ກວດ​ສອບ​ວ່າ​​​​ແມ່ນ​ຕົວ​ອັກສອນ a ​ເຖິງ z ​ແລະ A ​ເຖິງ Z ຫລື​ບໍ່
[0-9] ກວດ​ສອບ​ວ່າ​ເປັນ​ຕົວ​ອັກສອນ 0 ​ເຖິງ 9 ຫລື​ບໍ່
[a-zA-Z0-9] ກວດ​ສອບ​ວ່າ​​​​ແມ່ນ​ຕົວ​ອັກສອນ a ​ເຖິງ z ​ແລະ A ​ເຖິງ Z ​ແລະ 0 ​ເຖິງ 9 ຫລື​ບໍ່
[ \+\-\*\ / ] ກວດ​ສອບ​ວ່າ​ມີ​ເຄື່ອງໝາຍ + , - , * , / ຫລື​ບໍ່
^php  ກວດ​ສອບ​ວ່າ​ຕົວ​ອັກສອນ​ນີ້​ຂຶ້ນຕົ້ນ​ດ້ວຍ​ຄຳ​ວ່າ php ຫລື​ບໍ່
University$ ກວດ​ສອບ​ວ່າ​ຕົວ​ອັກ​ສອນ​ນີ້​ລົງທ້າຍ​ດ້ວຍ​ຄຳ​ວ່າ University ຫລື​ບໍ່
^Vientiane$ ກວດ​ສອບ​ວ່າ​ຕົວ​ອັກສອນ​ນີ້​ເປັນ​ຄຳ​ວ່າ Vientiane ຫລື​ບໍ່
^C{1}$ ກວດ​ສອບ​ວ່າ​ຕົວ​ອັກສອນ​ນີ້​ຕ້ອງ​ເປັນ​ຕົວ​ C ຕົວ​ດຽວ
^C{2}$ ກວດ​ສອບ​ວ່າ​ຕົວ​ອັກສອນ​ນີ້​ຕ້ອງ​ເປັນ​ຕົວ CC
C{2}  ກວດ​ສອບ​ວ່າ​ຕົວ​ອັກສອນ​ນີ້​ມີ​ຕົວ CC ຢູ່​ຫລື​ບໍ່
.{2}  ກວດ​ສອບ​ວ່າ​ຕົວ​ອັກສອນ​ນີ້​ເປັນ​ຕົວ​ໃດ​ກໍ່​ໄດ້ 2 ຕົວ​ຂຶ້ນ​ໄປ

9.2. ​ຟັງ​ຊັນ​ທີ່​ກ່ຽວ​ຂ້ອງ​ກັບ Regular Expression
​ໂປຣ​ແກຣມພາສາ PHP ​ມີ​ຟັງ​ຊັນ​ເພື່ອ​ໃຊ້​ໃນ​ການ​ຈັດການ​ຂໍ້​ມູນ​ໃນ​ລະດັບ​ຕົວ​ອັກສອນ​ດັ່ງ​ນີ້
9.2.1 ​ຟັງ​ຊັນ ereg() ​ແລະ eregi()
ຟັງ​ຊັນ​ທັງ​ສອງ​ນີ້​ໃຊ້​ສຳລັບ​ກວດ​ສອບ​ວ່າ ຂໍ້ຄວາມ​ທີ່​ຕ້ອງການ​ກວດ​ສອບ​ມີ​ຮູບ​ແບບ​ຕາມ​ທີ່​ກຳນົດ​ໄວ້ຫລື​ບໍ່ ​ແຕ່​ຟັງ​ຊັນ ereg() ຈະ​ຖື​ວ່າ​ຂໍ້ຄວາມ​ທີ່​ຕ້ອງການ​ກວດ​ສອບ​ຕົວ​ພາສາ​ອັງກິດ​ຕົວ​ພິມ​ໃຫຍ່ ​ແລະ ພິມ​ນ້ອຍ​ແຕກ​ຕ່າງ​ກັນ ສ່ວນ​ຟັງ​ຊັນ eregi() ຈະ​ຖື​ວ່າ​ຕົວ​ອັກສອນ​ພາສາ​ອັງກິດ​ພິມ​ໃຫຍ່ ​ແລະ ພິມ​ນ້ອຍ​ຈະ​ບໍ່​ຕ່າງ​ກັນ ​ເຊິ່ງທັງ​ສອງ​ຟັງ​ຊັນ​ມີ​ຮູບ​ແບບ​ການ​ຂຽນ
​ດັ່ງ​ລຸ່ມ​ນີ້:
ereg(“ຮູບ​ແບບ​ຂໍ້ຄວາມ”, “ຂໍ້ຄວາມ​ທີ່​ຕ້ອງການ​ກວດ​ສອບ”)
eregi(“ຮູບ​ແບບ​ຂໍ້ຄວາມຫ”,“ຂໍ້ຄວາມ​ທີ່​ຕ້ອງການ​ກວດ​ສອບ”)
ຜົນ​ໄດ້​ຮັບ​ຈາກ​ສອງ​ຟັງ​ຊັນ​ນີ້​ຈະ​ຄືນ​ຄ່າ​ຈິງ​ຖ້າວ່າ​ຂໍ້ຄວາມ​ທີ່​ ຕ້ອງການ​ກວດ​ສອບ​ ຫລື ກວດ​ພົບ​ຂໍ້ຄວາມ​ຕາມ​ຮູ​ບ​ແບບ​ທີ່​ກຳນົດ​ໄວ້ ​ແຕ່​ຈະ​ຄືນ​ຄ່າ ບໍ່​ຈິງ ​ເມື່ອ​ຂໍ້ຄວາມ​ທີ່​ຕ້ອງການ​ກວດ​ສອບ​ບໍ່​ກົງກັບ​ຮູບ​ແບບ ຫລື ບໍ່​ພົບ

ຕົວຢ່າງ2:
<?php
function datecheck($date)
{
if(ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$date))
{
echo "valid date format: $date<br>";
}
else
{
echo "Invalid date format:$date<br>";
}
}
$d1="2011-12-16";
$d2="16-12-2011";
$d3="2011:12:16";
datecheck($d1);
datecheck($d2);
datecheck($d3);
?>


ການ​ເຮັດ​ວຽກ​ຂອງ​ໂປຣ​ແກຣມຂ້າງ​ເທິງ​ນີ້​ຈະ​ກວດ​ສອບ​ຮູບ​ແບບ​ຂອງ​ວັນ,​ ເດືອນ,ປີ​ໃນ​ແບບ YYYY-DD-MM (ຕົວ​​ເລກ 0-9 ຈຳນວນ 4 ຕົວ,0-9 ຈຳນວນ 2 ຕົວ,0-9 ຈຳນວນ 2 ຕົວ) ກວດ​ສອບ​ຂໍ້ມູນ 3 ຊຸດ​ຄື:
2011-12-16   ​ເຊິ່ງ​ເປັນ​ຮູບ​ແບບ​ທີ່​ຖືກຕ້ອງ
16-12-2011   ​ເຊິ່ງ​ເປັນ​ຮູບ​ແບບ​ທີ່​ບໍ່​ຖືກຕ້ອງ ​ເພາະວ່າ​ຕົວ​ເລກ​ຊຸດ​ທຳ​ອິດ​ຕ້ອງ​ມີ 4 ຕົວ
2011:12:16   ​ເຊິ່ງ​ເປັນ​ຮູບ​ແບບ​ທີ່​ບໍ່​ຖືກຕ້ອງ ​ເພາະ​ວ່າ​ລະຫວ່າງ​ຕົວ​ເລກ​ວັນ​,​ເດືອນ​,ປີ ຕ້ອງ​ມີ​ເຄື່ອງໝາຍ - ຂັ້ນ​ໄວ້ ບໍ່​ແມ່ນ​ເຄື່ອງໝາຍ : ​ເຮັດ​ໃຫ້​ໄດ້ຜົນ​ຮັບ​ຂອງ​ໂປຣ​ແກຣມດັ່ງ​ນີ້:


 ຕົວຢ່າງ3: ກວດ​ສອບ​ຄວາ​ມຖືກຕ້ອງ​ຂອງ​ທີ່ຢູ່​ອີ​ເມລ
<?php
function Emailcheck($Email)
{
if(ereg("^[^\.\$_\'\"<>].+[^\.\$_\'\"|[:space:]<>]@[^\.\$_\'\'|[:space:]<>].+\..+[^\.\$_\'\"<>]$",$Email))
{
echo "valid E-mal format:$Email<br>";
}
else
{
echo "invalid E-mal format:$Email<br>";
}
}
$mail1="ngaviseth@live.com";
$mail2="ngaviseth$@live.com";
$mail3="ngaviseth@ live.com";
$mail4="ngaviseth@live";
$mail5="ngaviseth@live._";
Emailcheck($mail1);
Emailcheck($mail2);
Emailcheck($mail3);
Emailcheck($mail4);
Emailcheck($mail5);
?>

ການ​ເຮັດ​ວຽກ​ຂອງ​ໂປຣ​ແກຣມຂ້າງ​ເທິງ​ນີ້​ຈະ​ກວດ​ສອບ​ວ່າ ຊື່​ທີ່ຢູ່​ອີ​ເມລຖືກຕ້ອງ​ຕາມ​ຮູບ​ແບບ​ຫລື​ບໍ່ ​ໂດຍ​ຮູບ​ແບບ​ທີ່​ຖືກຕ້ອງ​ແມ່ນ  username@hostname.domainname  ຈາກ​ຕົວຢ່າງຂ້າງ​ເທິງ​ແມ່ນ​ກວດ  ​ສ​ອບຊື່​ທີ່ຢູ່​ອີ​ເມລ ngaviseth@live.com ​ໂດຍ​ໃຊ້​ຟັງ​ຊັນ ereg() ​ເຊິ່ງມີ​ການ​ກຳນົດ​ການກວດ​ສອບ​ດັ່ງ​ນີ້:
^[^\.\$_\'\"<>].+[^\.\$_\'\"|[:space:]<>]@[^\.\$_\'\'|[:space:]<>].+\..+[^\.\$_\'\"<>]$
​ເຊິ່ງ​ແຍກ​ອອກ​ເປັນ​ສ່ວນໆ​ອະທິບາຍ​ຄື:
^[^\.\$_\'\"<>]  ກວດ​ສອບ​ວ່າ ຂຶ້ນ​ຕົ້ນ​ຂອງ username ຕ້ອງ​ບໍ່​ມີ​ເຄື່ອງໝາຍ ​. , $ , " , < , >
.+   ຕ້ອງ​ປະກອບ​ດ້ວຍ​ຕົວ​ອັກສອນ​ໜຶ່ງ​ຕົວ​ຂຶ້ນ​ໄປ,ບໍ່​ມີ​ເລີຍ​ບໍ່​ໄດ້.
[^\.\$_\'\"|[:space:]<>]@ ທາງ​ໜ້າ​ເຄື່ອງໝາຍ @ ຫ້າມ​ເປັນ​ເຄື່ອງໝາຍ . , $ , _ , ' , " , < , > ຫລື ຍະ​ຫວ່າງ
[^\.\$_\'\'|[:space:]<>]  ທາງ​ຫລັງ​ເຄື່ອງໝາຍ @ ຫ້າມ​ເປັນ​ເຄື່ອງໝາຍ . , $ , _ , ' , " , < , > ຫລື  ຍະ​ຫວ່າງ
\.  ​ເຄື່ອງໝາຍ ​.
[^\.\$_\'\"<>]$  ກວດ​ສອບ​ວ່າ​ຕ້ອງ​ບໍ່​ລົງທ້າຍ​ດ້ວຍ​ເຄື່ອງໝາຍ . , $ , _ , ' , " , < , >
ຜົນ​ໄດ້​ຮັບ


9.2.2 ຟັງ​ຊັນ ereg_replace() ​ແລະ eregi_replace()
ຟັງ​ຊັນ​ທັງ​ສອງ​ນີ້​ໃຊ້​ສຳລັບ​ແທນ​ບ່ອນ​ຄຳ ຫລື ຂໍ້ຄວາມ​ລົງ​ໃນ​ສະຕຣິງຕາມ​ຮູບ​ແບບ​ທີ່​ກຳນົດ​ໄວ້ ​ແຕ່​ຕ່າງ​ກັນ​ຢູ່​ບ່ອນ​ວ່າ ereg_replace() ຈະ​ຖື​ວ່າ​ຕົວ​ອັກສອນ​ພິມ​ນ້ອຍ ກັບ​ພິມ​ໃຫຍ່​ຕ່າງ​ກັນ ​ເຊິ່ງມີ​ຮູບ​ແບບ​ການ​ນຳ​ໃຊ້​ດັ່ງ​ນີ້:
ereg_replace(“ຮູບ​ແບບ​ທີ່​ໃຊ້​ຄົ້ນ​ຫາ”,“ຄຳ ຫລື ຂໍ້ຄວາມ​ທີ່​ໃຊ້​ແທນ​ບ່ອນ”,“ຕົວ​ປ່ຽນ​ທີ່​ໃຊ້​ເກັບ​ຂໍ້​ມູນ​ຫລັງ​ຈາກ​ການ​ແທນ​ບ່ອນ”)
eregi_replace(“ຮູບ​ແບບ​ທີ່​ໃຊ້​ຄົ້ນ​ຫາ”,“ຄຳ ຫລື ຂໍ້ຄວາມ​ທີ່​ໃຊ້​ແທນ​ບ່ອນ”,“ຕົວ​ປ່ຽນ​ທີ່​ໃຊ້​ເກັບ​ຂໍ້​ມູນ​ຫລັງ​ຈາກ​ການ​ ແທນ​ບ່ອນ”)

ຕົວຢ່າງ4
<?php
$num='9';
$string="This string has four words";
$string=ereg_replace('four',$num,$string);
echo $string."<br>";
$num="6";
$string="This string has four words";
$string=ereg_replace('four',$num,$string);
echo $string."<br>";
?>
9.2.3 ຟັງ​ຊັນ split()
ຟັງ​ຊັນ​ນີ້​ໃຊ້​ສຳລັບ​ການແບ່ງ​ຂໍ້ຄວາມທີ່​ຕ້ອງການ ​ອອກ​ເປັນ​ສ່ວນໆ ​ໂດຍ​ຕ້ອງ​ກຳນົດ​ວ່າ​ຈະ​ໃຊ້​ຮູບ​ແບບ​ໃດ ຫລື ຂໍ້ຄວາມ​ໃດ​ເປັນ​ຕົວ​ແບ່ງ ​ແລະ ຜົນ​ຮັບ​ຈະ​ເກັບ​ໄວ້​ໃນ​ຕົວ​ປ່ຽນ​ອາ​ເຣ​ໃນ​ແຕ່​ລະ​ຊ່ອງ​ເລີ່​ມຈາກ 0 ​ເຊິ່ງມີ​ຮູບ​ແບບ​ການ​ນຳ​ໃຊ້​ຟັງ​ຊັນ​ດັ່ງ​ນີ້:
split(“ຮູບ​ແບບ ຫລື​ ຂໍ້ຄວາມທີ່​ໃຊ້​ເປັນ​ຕົວ​ແບ່ງ”,“ຂໍ້ຄວາມ​ຕົ້ນ​ສະບັບ”,“ຈຳນວນ​ຄັ້ງ​ທີ່​ຈະ​ແບ່ງ”)

ຕົວຢ່າງ5
<?php
$string="aBBBaCCCaDDDaEEEaFFFK";
$chunks=split("a",$string,5);
for($i=0;$i<count($chunks);$i++)
{
echo "$chunks[$i]<br>";

?>