際際滷

際際滷Share a Scribd company logo
Bi 3
M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao
C叩ch t畉o m畛t bi畛u th畛c ch鱈nh quy v x畛 l箪 b畉ng
hm preg_match
C叩ch s畛 d畛ng bi畛u th畛c ch鱈nh quy nhi畛u d嘆ng,
ton c畛c
C叩ch s畛 d畛ng hm preg_replace v preg_split
畛 lm 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
th畛c d畛 li畛u
C董 ch畉 t畉o, n辿m v x畛 l箪 ngo畉i l畛
M畛c ti棚u
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 2
T畉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 ton c畛c
Thay th畉 bi畛u th畛c ch鱈nh quy b畉ng m畛t x但u
Lm vi畛c v畛i bi畛u th畛c ch鱈nh quy
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 3
Hm 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:
C叩ch t狸m chu畛i:
Bi畛u th畛c ch鱈nh quy
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 4
preg_match($pattern, $string)
$pattern = '/Harris/';
$author = 'Ray Harris';
$editor = 'Joel Murach';
$author_match = preg_match($pattern, $author);
$editor_match = preg_match($pattern, $editor);
Ki畛m tra l畛i
trong bi畛u th畛c ch鱈nh quy
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 5
if ($author_match === false) {
echo 'Error testing author name';
} else if ($author_match === 0) {
echo 'Author name does not contain Harris';
} else {
echo 'Author name contains Harris';
}
M畛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
Bi 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);
Kh叩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)
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 7
Chu畛i m畉u  ngh挑a
 K箪 t畛 
/ K箪 t畛 /
t Tab
n D嘆ng (line) m畛i
r Quay l畉i
f Form feed
xhh K箪 t畛 Latin-1 v畛i gi叩 tr畛 l hai ch畛 s畛 h畛
th畉p ph但n
So kh畛p c叩c k箪 t畛 畉c bi畛t
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 8
$string = "息 2010 Mike's Music.  All rights reserved
(5/2010).";
preg_match('/xA9/', $string);
//So kh畛p 息 v tr畉 v畛 1
preg_match('///', $string);
//Tr v畛 false v 動a ra c畉nh b叩o
preg_match('//', $string);
//So kh畛p / v tr畉 v畛 1
preg_match('//', $string);
//So kh畛p  v tr畉 v畛 1
Chu畛i m畉u  ngh挑a
. B畉t k畛 k箪 t畛 董n no 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畛 no ngo畉i tr畛 ch畛 c叩i, s畛 v d畉u _
d B畉t k畛 ch畛 s畛 no
D B畉t k畛 k箪 t畛 no ngo畉i tr畛 ch畛 s畛
s B畉t k畛 kho畉ng tr畉ng no (tab, d畉u c叩ch, d嘆ng m畛i, )
S B畉t k畛 k箪 t畛 no ngo畉i tr畛 kho畉ng tr畉ng
Chu畛i m畉u cho c叩c lo畉i k箪 t畛
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 9
C叩c lo畉i k箪 t畛 so kh畛p
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 10
$string = 'The product code is MBT-3461';
preg_match('/MB.', $string);
//So kh畛p MBT v tr畉 v畛 1
preg_match('/MBd', $string);
//Kh担ng so kh畛p g狸 v tr畉 v畛 0
preg_match('/MBT-d', $string);
//So kh畛p MBT-3 v tr畉 v畛 1
S畛 d畛ng l畛p k箪 t畛
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 11
$string = 'The product code is MBT-3461';
preg_match('/MB[TF]', $string);
//So kh畛p MBT v tr畉 v畛 1
preg_match('/[.]/', $string);
//So kh畛p . v tr畉 v畛 1
preg_match('/[13579]/', $string);
//So kh畛p 3 v tr畉 v畛 1
S畛 d畛ng
c叩c si棚u k箪 t畛 (metacharacter)
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 12
preg_match('/MB[^TF]', $string);
//Kh担ng so kh畛p g狸 v tr畉 v畛 0
preg_match('/MBT[^^]/', $string);
//So kh畛p MBT- v tr畉 v畛 1
preg_match('/MBT-[1-5]/', $string);
//So kh畛p MBT-3 v tr畉 v畛 1
preg_match('/MBT[_*-]/',$string);
//So kh畛p MBT- v tr畉 v畛 1
S畛 d畛ng d畉u ngo畉c
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 13
preg_match('/MB[[:punct:]]', $string);
//So kh畛p MBT- v tr畉 v畛 1
preg_match('/MBT[[:digit:]]/', $string);
//Kh担ng so kh畛p g狸 v tr畉 v畛 0
preg_match('/MB[[:upper:]]/', $string);
//So kh畛p MBT v tr畉 v畛 1
Chu畛i m畉u  ngh挑a
^ B畉t 畉u x但u
$ K畉t th炭c x但u
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
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 14
So kh畛p v畛 tr鱈 x但u
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 15
$string = 'Ray Harris';
preg_match('/^Ray/', $string);
//Tr畉 v畛 1
preg_match('/Harris$/', $string);
//Tr畉 v畛 1
preg_match('/^Harris/', $string);
//Tr畉 v畛 0
$editor = 'Anne Boehm';
preg_match('/Ann/',$editor);
//Tr畉 v畛 1
preg_match('/Annb/', $editor);
//Tr畉 v畛 0
So kh畛p chu畛i m畉u con
Bi 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('/^(www) 1/', $name);
//Tr畉 v畛 1
So kh畛p c叩c chu畛i m畉u l畉p l畉i
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 17
$phone = '559-555-6627';
preg_match('/^d{3}-d{3}-d{4}$/', $phone);
//Tr畉 v畛 1
$fax = '(559) 555-6635';
preg_match('/^(d{3}) ?d{3}-d{4}$/', $fax);
//Tr畉 v畛 1
$phone_pattern = '^(d{3}-)|((d{3}) ?)d{3}-d{4}$';
preg_match($phone_pattern, $phone);
//Tr畉 v畛 1
preg_match($phone_pattern, $fax);
//Tr畉 v畛 1
C叩c x叩c nh畉n tr動畛c:
V鱈 d畛:
X叩c nh畉n tr動畛c
(Look-ahead assertion)
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 18
(?=[[:digit:]]
//K箪 t畛 k畉 ti畉p trong chu畛i m畉u ph畉i l ch畛 s畛
(?=.*[[:digit:]])
//Chu畛i m畉u ph畉i ch畛a 鱈t nh畉t m畛t ch畛 s畛
$pattern = '/^(?=.*[[:digit:]])[[:alnum:]]{6}$';
preg_match($pattern, 'Harris');
//X叩c nh畉n th畉t b畉i v tr畉 v畛 0
preg_match($pattern, 'Harri5');
//Tr畉 v畛 1
X叩c nh畉n tr動畛c 畉o ng動畛c
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 19
$pattern = '/^(?!3[2-9])[0-3][[:digit:]]$/';
preg_match($pattern, '32');
//X叩c nh畉n th畉t b畉i v tr畉 v畛 0
preg_match($pattern, '31');
//Tr畉 v畛 1
Chu畛i m畉u:
C叩c thnh ph畉n:
Chu畛i m畉u ki畛m tra
畛 ph畛c t畉p c畛a m畉t kh畉u
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 20
$pw_pattern =
'/^(?=.*[[:digit:]])(?=.*[[:punct:]])[[:print:]]{6,}$/'
^ //B畉t 畉u x但u
(?=.*[[:digit:]]) //t nh畉t m畛t ch畛 s畛
(?=.*[[:punct:]]) //t nh畉t m畛t d畉u c但u
[[:print:]]{6,} //t nh畉t s叩u k箪 t畛 in 動畛c
$ //K畉t th炭c x但u
S畛 d畛ng chu畛i m畉u:
Chu畛i m畉u ki畛m tra
畛 ph畛c t畉p c畛a m畉t kh畉u
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 21
$password1 = 'sup3rsecret';
$password2 = 'sup3rse(ret';
preg_match($pw_pattern, $password1);
//Tr畉 v畛 0
preg_match($pw_pattern, $password2);
//Tr畉 v畛 1
Bi畛u th畛c ch鱈nh quy nhi畛u d嘆ng
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 22
$string = "Ray HarrisnAuthor";
$pattern1 = '/Harris$/';
preg_match($pattern1, $string);
//Kh担ng so kh畛p Harris v tr畉 v畛 0
$pattern2 = '/Harris$/m';
preg_match($pattern2, $string);
//So kh畛p Harris v tr畉 v畛 1
Bi畛u th畛c ch鱈nh quy ton c畛c
Bi 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
}
S畛 d畛ng hm preg_place 畛 thay th畉 m畛t chu畛i
m畉u v畛i m畛t x但u:
Hm preg_replace
Bi 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
S畛 d畛ng hm preg_split 畛 t叩ch m畛t chu畛i d畛a
tr棚n m畉u so kh畛p:
Hm preg_split
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 25
$items = 'MBT-6745 HBS-5729, MBT-6824, and MBS-5214';
$pattern = '/[, ]+{and[ ]*)?/';
$items = preg_split($pattern, $items);
// $items ch畛a: 'MBT-6745', 'MBS-5729', 'MBT-6824',
'MBS-5214'
foreach ($items as $item) {
echo '<li>' . $item . '</li>';
}
C叩c bi畛u th畛c ch鱈nh quy
d湛ng 畛 ki畛m tra t鱈nh h畛p l畛
Bi 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
/^[[:digit:]]{3}-[[:digit:]]{3}-[[:digit:]]{4}$/
//S畛 th畉 ghi n畛 v畛i 畛nh d畉ng: 9999-9999-9999-9999
/^[[sdigit:]]{4}{-[[sdigit:]]{4}){3}$/
//M達 v湛ng v畛i m畛t trong hai 畛nh d畉ng sau: 99999 ho畉c
99999-9999
/^[[sdigit s]]{5}(-[[sdigit s ]]{4})?$/
//Ngy v畛i 畛nh d畉ng: mm/dd/yyyy
/^(0?[1-9]|l[0-2])/(0?[l-
9]|[12][[sdigit:]]|3[01])/[[:digit:]]{4}$/
X叩c th畛c s畛 i畛n tho畉i
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 27
$phone = '559-555-6624'; //S畛 i畛n
tho畉i h畛p l畛
$phone_pattern = '/^[[:digit:]]{3}-[[:digit:]]{3}-
[[:digit:]]{4}$/';
$match = preg_match($phone_pattern, $phone); //Tr畉 v畛 1
X叩c th畛c ngy v畛i
m畛t thnh ph畉n kh担ng h畛p l畛
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 28
$date = '8/10/209'; //Ngy kh担ng h畛p l畛
$date_pattern = '/^(0?[1-9]|1[0-2])/'
. '(0?[1-
9]|[12][[:digit:]]|3[01])/'
.'[[:digit:]]{4}$/';
$match = preg match($date pattern, $date); // Tr畉 v畛 0
X叩c th畛c 畛a ch畛 email 畉y 畛
Bi 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;
$atom = '[[:alnum:]_!#$%&'*+/=?^`{|}~-]+';
$dotatom = '(.' . $atom . ')*';
$address = '(^' . $atom . $dotatam . '$)';
$char = '([^"])';
$esc = '(["])';
$text = '(' . $char . '|' . $esc . ')+';
$quoted = '(^"' . $text . '"$)';
$local_part = '/' . $address . '|' . $quoted . '/';
$local_match = preg_match($local_part, $parts[0]);
if ($local_match === false || $local_match != 1) return
false;
X叩c th畛c 畛a ch畛 email 畉y 畛
Bi 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;
T畉o v n辿m ngo畉i l畛
S畛 d畛ng bi畛u th畛c try-catch
X畛 l箪 ngo畉i l畛
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 31
C炭 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)
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 32
new Exception($message [, $code])
throw $exception
Hm c坦 th畛 n辿m ra m畛t ngo畉i l畛:
Ngo畉i l畛
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 33
function calculate_future_value($investment,
$interest_rate, $years)
{
if ($investment <= 0 || $interest_rate <= 0 ||
$years <= 0 ) {
throw new Exception("Please check your entries
for validity."); // D畛 li畛u nh畉p vo kh担ng h畛p l畛
}
$futurevalue = $investment;
for ($i = 1; $i <= $years; $i++) {
$future_value =($future_value + ($future_value
* $interest_rate * .01));
}
return round($futureValue, 2);
}
C但u l畛nh s畉 k鱈ch ho畉t vi畛c n辿m ngo畉i l畛:
Ngo畉i l畛
Bi 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畛
Ph動董ng th畛c Gi畉i th鱈ch
getMessage() Tr畉 v畛 th担ng b叩o 動畛c truy畛n vo cho Exception
getCode() Tr畉 v畛 m達 l畛i 動畛c truy畛n vo 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 ngn x畉p d嘆 d畉u cho 畛i t動畛ng Exception
getTraceAsString() Tr畉 v畛 chu畛i ch畛a ngn x畉p d嘆 d畉u cho 畛i t動畛ng Exception
Ph動董ng th畛c
c畛a 畛i t動畛ng Exception
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 35
C炭 ph叩p:
C但u l畛nh try - catch b畉t m畛t 畛i t動畛ng ngo畉i l畛:
Bi畛u th畛c try-catch
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 36
try { statements }
catch (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();
}
C但u l畛nh try-catch n辿m l畉i m畛t 畛i t動畛ng ngo畉i
l畛:
Bi畛u th畛c try-catch
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 37
try {
$fv = calculate_future_value($investment,
$annual_rate, $years);
} catch (Exception $e) {
// lm g狸 坦 tr動畛c khi n辿m ngo畉i l畛
throw $e;
}
C但u l畛nh try - catch b畉t hai ki畛u ngo畉i l畛:
Bi畛u th畛c try-catch
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 38
try {
$db = new PDO($dsn, 'mmuser', 'pa55word', $options);
//c但u l畛nh kh叩c
} catch (PDOException $e) {
echo 'PDOException: ' . $e->getMessage();
} catch (Exception $e) {
echo 'Exception: ' . $e->getMessage();
}
Bi畛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畛 no 動畛c n辿m ra
T畛ng k畉t bi h畛c
Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 39

More Related Content

Web301 slide 3

  • 1. Bi 3 M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao
  • 2. C叩ch t畉o m畛t bi畛u th畛c ch鱈nh quy v x畛 l箪 b畉ng hm preg_match C叩ch s畛 d畛ng bi畛u th畛c ch鱈nh quy nhi畛u d嘆ng, ton c畛c C叩ch s畛 d畛ng hm preg_replace v preg_split 畛 lm 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 th畛c d畛 li畛u C董 ch畉 t畉o, n辿m v x畛 l箪 ngo畉i l畛 M畛c ti棚u Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 2
  • 3. T畉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 ton c畛c Thay th畉 bi畛u th畛c ch鱈nh quy b畉ng m畛t x但u Lm vi畛c v畛i bi畛u th畛c ch鱈nh quy Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 3
  • 4. Hm 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: C叩ch t狸m chu畛i: Bi畛u th畛c ch鱈nh quy Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 4 preg_match($pattern, $string) $pattern = '/Harris/'; $author = 'Ray Harris'; $editor = 'Joel Murach'; $author_match = preg_match($pattern, $author); $editor_match = preg_match($pattern, $editor);
  • 5. Ki畛m tra l畛i trong bi畛u th畛c ch鱈nh quy Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 5 if ($author_match === false) { echo 'Error testing author name'; } else if ($author_match === 0) { echo 'Author name does not contain Harris'; } else { echo 'Author name contains Harris'; }
  • 6. M畛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 Bi 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);
  • 7. Kh叩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) Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 7 Chu畛i m畉u ngh挑a K箪 t畛 / K箪 t畛 / t Tab n D嘆ng (line) m畛i r Quay l畉i f Form feed xhh K箪 t畛 Latin-1 v畛i gi叩 tr畛 l hai ch畛 s畛 h畛 th畉p ph但n
  • 8. So kh畛p c叩c k箪 t畛 畉c bi畛t Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 8 $string = "息 2010 Mike's Music. All rights reserved (5/2010)."; preg_match('/xA9/', $string); //So kh畛p 息 v tr畉 v畛 1 preg_match('///', $string); //Tr v畛 false v 動a ra c畉nh b叩o preg_match('//', $string); //So kh畛p / v tr畉 v畛 1 preg_match('//', $string); //So kh畛p v tr畉 v畛 1
  • 9. Chu畛i m畉u ngh挑a . B畉t k畛 k箪 t畛 董n no 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畛 no ngo畉i tr畛 ch畛 c叩i, s畛 v d畉u _ d B畉t k畛 ch畛 s畛 no D B畉t k畛 k箪 t畛 no ngo畉i tr畛 ch畛 s畛 s B畉t k畛 kho畉ng tr畉ng no (tab, d畉u c叩ch, d嘆ng m畛i, ) S B畉t k畛 k箪 t畛 no ngo畉i tr畛 kho畉ng tr畉ng Chu畛i m畉u cho c叩c lo畉i k箪 t畛 Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 9
  • 10. C叩c lo畉i k箪 t畛 so kh畛p Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 10 $string = 'The product code is MBT-3461'; preg_match('/MB.', $string); //So kh畛p MBT v tr畉 v畛 1 preg_match('/MBd', $string); //Kh担ng so kh畛p g狸 v tr畉 v畛 0 preg_match('/MBT-d', $string); //So kh畛p MBT-3 v tr畉 v畛 1
  • 11. S畛 d畛ng l畛p k箪 t畛 Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 11 $string = 'The product code is MBT-3461'; preg_match('/MB[TF]', $string); //So kh畛p MBT v tr畉 v畛 1 preg_match('/[.]/', $string); //So kh畛p . v tr畉 v畛 1 preg_match('/[13579]/', $string); //So kh畛p 3 v tr畉 v畛 1
  • 12. S畛 d畛ng c叩c si棚u k箪 t畛 (metacharacter) Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 12 preg_match('/MB[^TF]', $string); //Kh担ng so kh畛p g狸 v tr畉 v畛 0 preg_match('/MBT[^^]/', $string); //So kh畛p MBT- v tr畉 v畛 1 preg_match('/MBT-[1-5]/', $string); //So kh畛p MBT-3 v tr畉 v畛 1 preg_match('/MBT[_*-]/',$string); //So kh畛p MBT- v tr畉 v畛 1
  • 13. S畛 d畛ng d畉u ngo畉c Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 13 preg_match('/MB[[:punct:]]', $string); //So kh畛p MBT- v tr畉 v畛 1 preg_match('/MBT[[:digit:]]/', $string); //Kh担ng so kh畛p g狸 v tr畉 v畛 0 preg_match('/MB[[:upper:]]/', $string); //So kh畛p MBT v tr畉 v畛 1
  • 14. Chu畛i m畉u ngh挑a ^ B畉t 畉u x但u $ K畉t th炭c x但u 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 Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 14
  • 15. So kh畛p v畛 tr鱈 x但u Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 15 $string = 'Ray Harris'; preg_match('/^Ray/', $string); //Tr畉 v畛 1 preg_match('/Harris$/', $string); //Tr畉 v畛 1 preg_match('/^Harris/', $string); //Tr畉 v畛 0 $editor = 'Anne Boehm'; preg_match('/Ann/',$editor); //Tr畉 v畛 1 preg_match('/Annb/', $editor); //Tr畉 v畛 0
  • 16. So kh畛p chu畛i m畉u con Bi 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('/^(www) 1/', $name); //Tr畉 v畛 1
  • 17. So kh畛p c叩c chu畛i m畉u l畉p l畉i Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 17 $phone = '559-555-6627'; preg_match('/^d{3}-d{3}-d{4}$/', $phone); //Tr畉 v畛 1 $fax = '(559) 555-6635'; preg_match('/^(d{3}) ?d{3}-d{4}$/', $fax); //Tr畉 v畛 1 $phone_pattern = '^(d{3}-)|((d{3}) ?)d{3}-d{4}$'; preg_match($phone_pattern, $phone); //Tr畉 v畛 1 preg_match($phone_pattern, $fax); //Tr畉 v畛 1
  • 18. C叩c x叩c nh畉n tr動畛c: V鱈 d畛: X叩c nh畉n tr動畛c (Look-ahead assertion) Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 18 (?=[[:digit:]] //K箪 t畛 k畉 ti畉p trong chu畛i m畉u ph畉i l ch畛 s畛 (?=.*[[:digit:]]) //Chu畛i m畉u ph畉i ch畛a 鱈t nh畉t m畛t ch畛 s畛 $pattern = '/^(?=.*[[:digit:]])[[:alnum:]]{6}$'; preg_match($pattern, 'Harris'); //X叩c nh畉n th畉t b畉i v tr畉 v畛 0 preg_match($pattern, 'Harri5'); //Tr畉 v畛 1
  • 19. X叩c nh畉n tr動畛c 畉o ng動畛c Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 19 $pattern = '/^(?!3[2-9])[0-3][[:digit:]]$/'; preg_match($pattern, '32'); //X叩c nh畉n th畉t b畉i v tr畉 v畛 0 preg_match($pattern, '31'); //Tr畉 v畛 1
  • 20. Chu畛i m畉u: C叩c thnh ph畉n: Chu畛i m畉u ki畛m tra 畛 ph畛c t畉p c畛a m畉t kh畉u Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 20 $pw_pattern = '/^(?=.*[[:digit:]])(?=.*[[:punct:]])[[:print:]]{6,}$/' ^ //B畉t 畉u x但u (?=.*[[:digit:]]) //t nh畉t m畛t ch畛 s畛 (?=.*[[:punct:]]) //t nh畉t m畛t d畉u c但u [[:print:]]{6,} //t nh畉t s叩u k箪 t畛 in 動畛c $ //K畉t th炭c x但u
  • 21. S畛 d畛ng chu畛i m畉u: Chu畛i m畉u ki畛m tra 畛 ph畛c t畉p c畛a m畉t kh畉u Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 21 $password1 = 'sup3rsecret'; $password2 = 'sup3rse(ret'; preg_match($pw_pattern, $password1); //Tr畉 v畛 0 preg_match($pw_pattern, $password2); //Tr畉 v畛 1
  • 22. Bi畛u th畛c ch鱈nh quy nhi畛u d嘆ng Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 22 $string = "Ray HarrisnAuthor"; $pattern1 = '/Harris$/'; preg_match($pattern1, $string); //Kh担ng so kh畛p Harris v tr畉 v畛 0 $pattern2 = '/Harris$/m'; preg_match($pattern2, $string); //So kh畛p Harris v tr畉 v畛 1
  • 23. Bi畛u th畛c ch鱈nh quy ton c畛c Bi 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 }
  • 24. S畛 d畛ng hm preg_place 畛 thay th畉 m畛t chu畛i m畉u v畛i m畛t x但u: Hm preg_replace Bi 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
  • 25. S畛 d畛ng hm preg_split 畛 t叩ch m畛t chu畛i d畛a tr棚n m畉u so kh畛p: Hm preg_split Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 25 $items = 'MBT-6745 HBS-5729, MBT-6824, and MBS-5214'; $pattern = '/[, ]+{and[ ]*)?/'; $items = preg_split($pattern, $items); // $items ch畛a: 'MBT-6745', 'MBS-5729', 'MBT-6824', 'MBS-5214' foreach ($items as $item) { echo '<li>' . $item . '</li>'; }
  • 26. C叩c bi畛u th畛c ch鱈nh quy d湛ng 畛 ki畛m tra t鱈nh h畛p l畛 Bi 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 /^[[:digit:]]{3}-[[:digit:]]{3}-[[:digit:]]{4}$/ //S畛 th畉 ghi n畛 v畛i 畛nh d畉ng: 9999-9999-9999-9999 /^[[sdigit:]]{4}{-[[sdigit:]]{4}){3}$/ //M達 v湛ng v畛i m畛t trong hai 畛nh d畉ng sau: 99999 ho畉c 99999-9999 /^[[sdigit s]]{5}(-[[sdigit s ]]{4})?$/ //Ngy v畛i 畛nh d畉ng: mm/dd/yyyy /^(0?[1-9]|l[0-2])/(0?[l- 9]|[12][[sdigit:]]|3[01])/[[:digit:]]{4}$/
  • 27. X叩c th畛c s畛 i畛n tho畉i Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 27 $phone = '559-555-6624'; //S畛 i畛n tho畉i h畛p l畛 $phone_pattern = '/^[[:digit:]]{3}-[[:digit:]]{3}- [[:digit:]]{4}$/'; $match = preg_match($phone_pattern, $phone); //Tr畉 v畛 1
  • 28. X叩c th畛c ngy v畛i m畛t thnh ph畉n kh担ng h畛p l畛 Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 28 $date = '8/10/209'; //Ngy kh担ng h畛p l畛 $date_pattern = '/^(0?[1-9]|1[0-2])/' . '(0?[1- 9]|[12][[:digit:]]|3[01])/' .'[[:digit:]]{4}$/'; $match = preg match($date pattern, $date); // Tr畉 v畛 0
  • 29. X叩c th畛c 畛a ch畛 email 畉y 畛 Bi 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; $atom = '[[:alnum:]_!#$%&'*+/=?^`{|}~-]+'; $dotatom = '(.' . $atom . ')*'; $address = '(^' . $atom . $dotatam . '$)'; $char = '([^"])'; $esc = '(["])'; $text = '(' . $char . '|' . $esc . ')+'; $quoted = '(^"' . $text . '"$)'; $local_part = '/' . $address . '|' . $quoted . '/'; $local_match = preg_match($local_part, $parts[0]); if ($local_match === false || $local_match != 1) return false;
  • 30. X叩c th畛c 畛a ch畛 email 畉y 畛 Bi 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;
  • 31. T畉o v n辿m ngo畉i l畛 S畛 d畛ng bi畛u th畛c try-catch X畛 l箪 ngo畉i l畛 Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 31
  • 32. C炭 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) Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 32 new Exception($message [, $code]) throw $exception
  • 33. Hm c坦 th畛 n辿m ra m畛t ngo畉i l畛: Ngo畉i l畛 Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 33 function calculate_future_value($investment, $interest_rate, $years) { if ($investment <= 0 || $interest_rate <= 0 || $years <= 0 ) { throw new Exception("Please check your entries for validity."); // D畛 li畛u nh畉p vo kh担ng h畛p l畛 } $futurevalue = $investment; for ($i = 1; $i <= $years; $i++) { $future_value =($future_value + ($future_value * $interest_rate * .01)); } return round($futureValue, 2); }
  • 34. C但u l畛nh s畉 k鱈ch ho畉t vi畛c n辿m ngo畉i l畛: Ngo畉i l畛 Bi 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畛
  • 35. Ph動董ng th畛c Gi畉i th鱈ch getMessage() Tr畉 v畛 th担ng b叩o 動畛c truy畛n vo cho Exception getCode() Tr畉 v畛 m達 l畛i 動畛c truy畛n vo 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 ngn x畉p d嘆 d畉u cho 畛i t動畛ng Exception getTraceAsString() Tr畉 v畛 chu畛i ch畛a ngn x畉p d嘆 d畉u cho 畛i t動畛ng Exception Ph動董ng th畛c c畛a 畛i t動畛ng Exception Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 35
  • 36. C炭 ph叩p: C但u l畛nh try - catch b畉t m畛t 畛i t動畛ng ngo畉i l畛: Bi畛u th畛c try-catch Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 36 try { statements } catch (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(); }
  • 37. C但u l畛nh try-catch n辿m l畉i m畛t 畛i t動畛ng ngo畉i l畛: Bi畛u th畛c try-catch Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 37 try { $fv = calculate_future_value($investment, $annual_rate, $years); } catch (Exception $e) { // lm g狸 坦 tr動畛c khi n辿m ngo畉i l畛 throw $e; }
  • 38. C但u l畛nh try - catch b畉t hai ki畛u ngo畉i l畛: Bi畛u th畛c try-catch Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 38 try { $db = new PDO($dsn, 'mmuser', 'pa55word', $options); //c但u l畛nh kh叩c } catch (PDOException $e) { echo 'PDOException: ' . $e->getMessage(); } catch (Exception $e) { echo 'Exception: ' . $e->getMessage(); }
  • 39. Bi畛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畛 no 動畛c n辿m ra T畛ng k畉t bi h畛c Bi 3 - M畛t s畛 k畛 thu畉t l畉p tr狸nh PHP n但ng cao 39