SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Lớp đối tượng RegEx và cách validate các form
bằng javascript
14 Mar
Như bài viết Thẻ iframe và những lưu ý đã đề cập, trong javascript có sẵn một lớp đối tượng hàm
RegEx cho phép chúng ta kiểm tra các chuỗi ký tự và validate một cách nhanh chóng mà không
cần viết thêm các hàm xử lý chuỗi. Trong bài này chúng ta sẽ cùng tìm hiểu cơ chế RegEx và
một số ứng dụng validate dữ liệu.
Trước hết chúng ta thử chạy đoạn code html sau đây:
Khi chạy chúng ta sẽ thấy là nếu chúng ta nhập vào chữ số hoặc ký tự đặc biệt, java sẽ cảnh báo
bằng lệnh alert ở dòng 10. còn nếu nhập đúng tên thì chúng ta sẽ thấy chương trình cho ra một
câu chào. Cơ chế làm việc của RegEx ở đây cũng giống như với các hàm PCRE của PHP chỉ
khác một chút về cách trình bày, còn quy ước về mẫu tìm kiếm, so sánh thì như nhau.
Với java, bạn chỉ cần tạo ra một biến ký tự, trong ví dụ trên là filter và gán bằng chuỗi mẫu
filter=/[a-zA-z]+$/
Sau đó bạn dùng một trong các phương thức sẵn có của đối tượng biến vừa tạo. Đó là .search(),
.match(), .replace() hoặc .test()
.match() và .test() là hai phương thức ngược nhau. .match là phương thức của chuỗi tìm kiếm còn
.test là phương thức của chuỗi mẫu (pattern). Hãy xem đoạn code dưới đây, so sánh với đoạn
code trên thì bạn có thể tự rút ra kết luận:
Các điều kiện nằm ngoài / / của mẫu tìm kiếm cũng khá giống với PCRE, đó là:
i – tìm kiếm không phân biệt chữ hoa chữ thường
g – tìm kiếm từ đầu chuỗi đến cuối chuỗi
Ví dụ đoạn code sau đây in ra 3 chữ T,t,t vì có điều kiện i,g
Các điều kiện nằm bên trong / / cũng vậy:
^ – trả về kết quả nếu chuỗi mẫu được tìm thấy ở đầu chuỗi gốc
$ – trả về kết quả nếu chuỗi mẫu được tìm thấy ở cuối chuỗi gốc
w – tìm ký tự là chữ cái, chữ số hoặc dấu gạch dưới
d – tìm ký tự là chữ số
s – tìm ký tự là dấu cách
Chạy đoạn code sau đây bạn sẽ thấy rõ điều đó:
Chúng ta cũng có một số lệnh xác định số lần xuất hiện (lặp lại) của các ký tự tìm kiếm gần
giống với PCRE
{x}: Lặp một ký tự hoặc một biểu thức con trước đó x lần
{x,y}: Lặp một ký tự hoặc một biểu thức con trước đó từ x đến y lần
{x,}: Lặp một ký tự hoặc một biểu thức con trước đó >= x lần
?: Lặp một ký tự hoặc một biểu thức con trước đó 0 hoặc 1 lần
*: Lặp một ký tự hoặc một biểu thức con trước đó >=0 lần
+: Lặp một ký tự hoặc một biểu thức con trước đó >=1 lần
Ví dụ minh họa dưới đây
Chúng ta có thể sử dụng các dấu ngoặc tròn () để gộp nhóm như trong các biểu thức toán học
thông thường.
(): Tìm kiếm một nhóm các ký tự bên trong cặp dấu ngoặc và lưu vào chuỗi kết quả.
(?: ): Tìm kiếm chuỗi kết quả không chứa tập ký tự nằm trong cặp dấu ngoặc.
|: Phép toán hoặc, được sử dụng để kết hợp các mệnh đề với nhau vào chung một biểu thức
Ví dụ sau đây dùng () để tìm các địa chỉ email trong một chuỗi
Cuối cùng chúng ta thử sử dụng phương thức .replace để thay thế một mẫu trong chuỗi bằng ví
dụ sau:
TH
(14-March-2012)
Gửi mail với PHP
31 May
Một function cơ bản mà các website thường dùng là có một form liên hệ để người viếng thăm có
thể gửi mail trực tiếp đến người quản trị website. Vậy các coder xử lý vấn đề này ra sao khi xây
dựng website. Bài viết này sẽ giải thích về cơ chế làm việc của mail và ứng dụng gửi mail trong
PHP.
Cơ chế làm việc của email
Bản chất của email là hai dịch vụ độc lập một gửi, một nhận và thường được cài đặt trên cùng
một server. Có nhiều giao thức khác nhau cho việc gửi, nhận mail nhưng thông dụng nhất là
POP3 cho việc nhận mail và SMTP cho việc gửi mail. Một SMTP server khi gửi mail đi thông
thường không cần có account. Bất cứ khi nào nó nhận được yêu cầu từ một client nào đó tuân thủ
theo đúng cấu trúc của nó, thường là mail header, mail subject, và mail content và receipient (địa
chỉ email của người nhận) là nó sẽ lập tức tìm cách kết nối với POP server để gửi cái mail đó đi.
Còn một POP server thì khác, nó quản lý cả một database các địa chỉ email và mật khẩu do
người quản trị khởi tạo ra và cấp phát cho người dùng. Khi nhận được một email nó sẽ căn cứ
theo địa chỉ người nhận để chuyển đến đúng hòm thư của người đó.
Một điểm lý thú là đa phần các hosting hiện nay đều có kèm theo các dịch vụ mail POP và
SMTP, chẳng hạn như Cpanel và Direct admin dùng dịch vụ mail Dovecot. Do đó khi bạn mua
hosting bạn có quyền tạo ra các email gắn luôn với tên miền của bạn chẳng hạn như
abc@congty.com. Nhờ dịch vụ miễn phí này nên bạn hoàn toàn có thể dùng hàm mail() của PHP
trên các hosting này để tạo ra các form liên hệ cho phép khách hàng viếng thăm website của bạn
có thể gửi mail trực tiếp đi từ website.
Sử dụng hàm mail() của PHP.
Trước hết chúng ta viết đoạn code sau đây để tạo một form liên hệ và gọi đến hàm mail() để gửi
mail đi sau khi nhấn SEND
Sau khi có đoạn code này nếu bạn upload lên một hosting thì nó sẽ chạy ngay lập tức. Vì như đã
nói ở trên, hầu hết các hosting hiện nay đều hỗ trợ dịch vụ POP/SMTP. Lưu ý, trong code dòng
12 tôi để địa chỉ nhận email là info@thuonghieuweb.com, các bạn cần thay bằng địa chỉ email
của mình để có thể test việc nhận mail này.
Tuy nhiên với những bạn không có hosting hoặc là đang phát triển trên môi trường local, sử
dụng xamp hoặc wamp làm server thì đoạn code này chạy sẽ báo lỗi. Lý do là trên xamp và
wamp không có kèm theo dịch vụ mail. Để vượt qua các lỗi này và test chúng ta làm như sau:
Bước một: tìm một website nào đó mà server ở đó chấp nhận việc gửi mail bằng giao thức SMTP
mà không cần xác thực. Tôi đã tìm được một cái, đó là http://www.vnpec.com.vn các bạn có thể
dùng tạm để test.
Bước hai: chỉnh sửa file php.ini trong wamp hoặc xamp với 3 dòng sau:
[mail function]
SMTP = http://www.vnpec.com.vn
smtp_port = 25
sendmail_from = contact@vnpec.com.vn
Bước 3: Chạy test lại đoạn code trên ở local.
Khai báo header
Trong khi chạy đoạn code trên, các bạn sẽ thấy có một phiền toái nhỏ đó là email mà bạn dùng
để gửi nhờ thư sẽ xuất hiện trong trường from. Như vậy sẽ không chuyên nghiệp lắm. Còn nếu
bạn chạy trên hosting thì hòm mail này sẽ có tên là root@localhost hay bất cứ một cái email
default nào đó của SMTP tạo ra. Điều này khiến bạn không reply cho người điền form được. Để
khắc phục vấn đề này chúng ta dùng thêm tham số header cho hàm mail(). Hãy chèn đoạn mã
sau đây vào trong code, thay thế cho dòng số 13
$headers = „MIME-Version: 1.0′ . “rn”;
$headers .= „Content-type: text/html; charset=utf-8′ . “rn”;
$headers .= „From: „.$name.‟ <‟.$from.‟>‟ . “rn”;
if(mail($to, $subject, $content, $headers))
Rồi chạy thử bạn sẽ thấy kết quả!
Kết luận:
- Việc sử dụng mail() của PHP để gửi mail có thể tạo được các form liên hệ rất chuyên nghiệp
- Tuy nhiên nó có rắc rối khi test thử với môi trường phát triển là PC
- Có một chút rắc rối với trường from và được khắc phục bằng cách thay thế header của mail
- Không dùng được với các SMTP server đòi hỏi phải xác thực user trước khi gửi mail
Bên cạnh hàm mail() chúng ta còn một công cụ khác cực mạnh là class phpmailer. PHPmailer sẽ
giúp giải quyết tất cả các rắc rối trên trong code mà không thèm đụng đến PHP ini file. Tôi sẽ đề
cập đến việc sử dụng công cụ này trong một bài viết khác
Hẹn gặp lại
TH
Bạn muốn tạo nút Like và Dislike giống như youtube mà không cần phải load lại trình duyệt. Bài
viết sau sẽ giúp bạn làm được điều đó hết sức đơn giản sử dụng jQuery và Ajax.
I. Database
Đầu tiên tạo một cái db đã. Db này dùng để lưu Id, nội dung tin, và up – like, down – dislike.Với
mỗi một lần click tương ứng thì giá trị sẽ cộng thêm 1
HTML:
CREATE TABLE messages(
id INT PRIMARY KEY AUTO_INCREMENT,
message TEXT,
up INT,
down INT);
II.Index.php
File này bao gồm mã PHP, Jquery, HTML.$(“.like”).click(function(){} là hàm xử lý sự kiện
click nút có class là like. Ở đây chúng ta cho 2 nút up và down đều có class là like. Sau đó chúng
ta lấy ra giá trị id và name của nó bằng $(this).attr(“id”);. Sau khi lấy được thành công thì truyền
dữ liệu qua file rating.php sử dụng ajax. Nếu đang trong tiến trình xử lý thì #flash sẽ được hiện
ra.Thành công sẽ cho hiện ra #content
HTML:
<script type="text/javascript" src="http://ajax.googleapis.com/
ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$(".like").click(function()
{
var id=$(this).attr("id");
var name=$(this).attr("name");
var dataString = 'id='+ id + '&name='+ name;
$("#votebox").slideDown("slow");
$("#flash").fadeIn("slow");
$.ajax
({
type: "POST",
url: "rating.php",
data: dataString,
cache: false,
success: function(html)
{
$("#flash").fadeOut("slow");
$("#content").html(html);
}
});
});
// Close button action
$(".close").click(function()
{
$("#votebox").slideUp("slow");
});
});
</script>
//HTML Code
<a href="#" class="like" id="1" name="up">Like</a>
--
<a href="#" class="like" id="1" name="down">Dislike</a>
<div id="votebox">
<span id='close'><a href="#" class="close">X</a></span>
<div id="flash">Loading........</div>
<div id="content">
</div>
</div>
III. Rating.php
Trong file này chúng ta sẽ bắt request của user, và kiểm tra xem đó là like hay dislike để thực
hiện update vào csdl. Sau đó thực hiện tính tổng số like và dislike, thực hiện lấy % để hiển thị ra
vạch màu tương ứng. Việc dùng % để đảm bảo khi dữ liệu ngày càng tăng thì 2 vạch màu sẽ
không thể kéo dài mãi được.
PHP:
<?php
include("db.php");
if($_POST['id'])
{
$id=mysql_escape_String($_POST['id']);
$name=mysql_escape_String($_POST['name']);
// Vote update
mysql_query("update messages set $name=$name+1 where id='$id'");
// Getting latest vote results
$result=mysql_query("select up,down from messages where id='$id'");
$row=mysql_fetch_array($result);
$up_value=$row['up'];
$down_value=$row['down'];
$total=$up_value+$down_value; // Total votes
$up_per=($up_value*100)/$total; // Up percentage
$down_per=($down_value*100)/$total; // Down percentage
//HTML output
echo '<b>Ratings for this blog</b> ( '.$total.' total)
Like :'.$up_value.'
<div id="greebar" style="width:'.$up_per.'%"></div>
Dislike:'.$down_value.'
<div id="redbar" style="width:'.$down_per.'%"></div>';
}
?>
Cuối cùng là mã CSS để cho nó đẹp, cái cuối cùng này là tùy bạn muốn nó hiển thị thế nào là do
bạn design thôi. Code cơ bản để nó hoạt động tôi đã đưa bên trên hết rồi.
HTML:
#votebox
{
border:solid 1px #dedede; padding:3px;
display:none;
padding:15px;
width:700px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
}
#greebar
{
float:left;
background-color:#aada37;
border:solid 1px #698a14;
width:0px;
height:12px;
}
#redbar
{
float:left;
background-color:#cf362f;
border:solid 1px #881811;
width:0px;
height:12px;
}
#close
{
float:right; font-weight:bold;
padding:3px 5px 3px 5px;
border:solid 1px #333;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
}
Chúc bạn thành công!
Theo camnhan
Xử lý chuỗi bằng Javascript – Regular Expression
Published July 22, 2013 in Học Css - Javascript
Xử lý chuỗi bằng Javascript – Regular Expression
Hướng dẫn sửdụng Xửlý chuỗi bằng javascript Regular Expression kiểm tra email, kiểm tra chuỗi, kiểm
tra ký tự
Phần 1: Lý thuyết
1. RegEx là gì?
RegEx (Regular Expression) là một biểu thức thường được dùng để mô tả một mẫu chuỗi (string
pattern).
2. Vậy, mẫu chuỗi là gì?
Mẫu chuỗi, diễn giải thô ra có nghĩa là các chuỗi văn bản tuân thủ theo một quy luật sắp xếp
(mẫu) nào đó.
Ví dụ:
- Một số được viết dưới dạng một chuỗi với các chữ số, có thể có chứa tối đa 1 dấu phẩy ở giữa.
- Dữ liệu kiểu ngày tháng: Thường được viết theu mẫu: dd/mm/yyyy: Hai chữ số đầu tiên xác
định ngày, tiếp theo là dấu gạch chéo, tiếp đến là 2 chữ số xác định tháng, tiếp theo là dấu gạch
chéo và kết thúc bởi bốn chữ số xác định năm.
- Địa chỉ email: xxx@yyy.zz.gìđó: Bao gồm 1 chuỗi văn bản được chia thành 2 phần: Phần user
name và phần domain, 2 phần này cách nhau bởi dấu @. Phần domain có luật riêng theo cách đặt
tên của domain…
…
3. Khái niệm về biểu thức:
Một biểu thức bao gồm các toán tử và các toán hạng
Toán tử: Các phép toán (VD: cộng, trừ, nhân, chia, lặp, gộp, so sánh…)
Toán hạng: Biến, giá trị được dùng để tính toán.
4. Vậy regex được dùng để làm gì và nó có tác dụng gì?
Trong các kỹ thuật xử lý chuỗi (VD: Tìm kiếm, thay thế…) thông thường, chúng ta cần phải xác
định các chuỗi tường minh để tìm kiếm. Các chuỗi này được gọi là từ khoá.
Tuy nhiên, trong một số trường hợp ngoại lệ khác, chúng ta không thể chỉ định rõ chuỗi từ khoá
đó, mà chỉ có thể mô tả được quy luật để sinh ra chuỗi từ khoá đó.
VD: Làm thế nào để lấy được toàn bộ địa chỉ email trong một văn bản?
Rõ ràng với câu hỏi này, bằng mắt thừong thì ta có thể lấy được, còn bằng con đường lập trình
thông thường theo kiểu tìm kiếm bằng từ khoá là các địa chỉ email thì chúng ta … bó tay.
Nhưng nếu có regex, chúng ta có thể thiết lập ra quy luật của một địa chỉ email và yêu cầu
chương trinh tìm kiếm theo luật đó.
Cú pháp khai báo regex trong JavaScript
Chúng ta có thể khai báo biến chứa regex như sau:
Mã:
var tên_biến= /mẫu_chuỗi/cách_tìm;
Tham số cách_tìm xác định cách thức tìm kiếm mẫu chuỗi, nó có thể chứa các giá trị sau đây:
g: ("global" matching): Lặp lại quá trình tìm kiếm cho đến khi kết thúc chuỗi. Khi sử dụng
phương thức replace(), giá trị này sẽ thay thế tất cả các cụm từ tìm thấy thay vì chỉ cụm từ đầu
tiên.
i: so sánh không phân biệt hoa thường.
m: so sánh ở chế độ đa dòng.
Có thể phối hợp nhiều cách_tìm. VD: gi. Cũng có thể không cần đưa tham số này vào
Các phương thức có hỗ trợ regEx trong JavaScript:
Giả sử có một biến chuỗi S:
S.search(): Tìm chuỗi phù hợp với biểu thức đã cho và trả về vị trí của chuỗi đó
S.match(): Tìm chuỗi theo mẫu và trả về một mảng các giá trị tìm thấy
S.replace() Thay thế chuỗi bằng chuỗi khác phù hợp với mẫu tìm kiếm.
…
Các bạn có thể tìm hiểu cách sử dụng các hàm này trên mạng, ở đây tôi chỉ sử dụng hàm match
để demo cách sử dụng regex. Nên nhớ, hàm match() này trả về một mảng các giá trị phù hợp với
mẫu chuỗi cần tìm.
Ví dụ đơn giản đầu tiên về regex:
Đoạn mã dưới đây trả về mảng các chuỗi có chứa chữ thu:
Mã:
<html>
<body>
<script type="text/javascript">
var str = "Ngoai hien giot mua thu thanh thot roi";
var patt1 = /thu/; // Mẫu chuỗi xác định một chữ thu
var result = str.match(patt1);
document.write(result); // In ra chữ thu
</script>
</body>
</html>
Đoạn ví dụ thứ 2 chỉ tìm kiếm các mẫu chuỗi chứa duy nhất chữ t:
HTML Code:
<html>
<head>
<script>
var s="Thu mot ti, thu hai Ti";
//regex: t/g xác định việc tìm kiếm tất cả các chuỗi là chữ t,
//và tiến hành tìm từ đầu đến cuối chuỗi nhờ tham số cách tìm /g.
document.write(s.match(/t/g)); //Kết quả: t,t,t
//regex: t/gi xác định việc tìm kiếm tất cả các chuỗi là chữ t,
//và tiến hành tìm từ đầu đến cuối chuỗi không phân biệt chữ hoa, chữ thường
nhờ tham số cách tìm /gi.
document.write(s.match(/t/gi)); //Kết quả: T,t,t,t,T
</script>
</head>
</html>
Các phép toán tìm kiếm theo vị trí
^: Trả về chuỗi kết quả trong trường hợp chuỗi này nằm ở vị trí đầu của chuỗi gốc
$: Trả về chuỗi kết quả trong trường hợp chuỗi này nằm ở vị trí cuối của chuỗi gốc
b: Trả về chuỗi kết quả trong trường hợp chuỗi này nằm ở vị trí đầu của một từ trong chuỗi
gốc. Nếu cần so sánh ở vị trí cuối từ, hãy đặt biểu thức b ở vị trí cuối từ.
B: Trả về chuỗi kết quả trong trường hợp chuỗi này không nằm ở vị trí đầu của một từ trong
chuỗi gốc. (tuỳ thuộc vào vị trí đặt B ở đầu hoặc cuối một từ)
?=: Trả về chuỗi kết quả nếu theo sau chuỗi đó là một chuỗi nào đó được chỉ định trước
?!: Trả về chuỗi kết quả nếu sau chuỗi đó không phải là một chuỗi nào đó được chỉ định trước
Ví dụ:
HTML Code:
<html>
<head>
<script>
var s="Thu mot ti, thu hai Ti";
document.write(s.match(/^Thu/i)); //Kết quả: Thu, vì chữ Thu nằm ở đầu
chuỗi s
document.write(s.match(/t$/gi)); //Kết quả: null, vì ko tìm thấy chữ t
nằm ở cuối chuỗi s
document.write(s.match(/ti$/gi)); //Kết quả: Ti, vì chữ Ti nằm ở vị trí
cuối chuỗi s và thoả mãn điều kiện tìm kiếm /gi (tìm toàn cục ko phân biệt
chữ hoa, chữ thường)
document.write ("<BR>");
document.write(s.match(/bti/gi));//Kết quả: ti,Ti vì 2 chữ này nằm ở vị
trí đầu của 2 từ ti, Ti trong chuỗi s
document.write ("<BR>");
document.write(s.match(/Bai/gi));//Kết quả: ai, vì chữ này nằm ở phía
cuối của chữ hai trong chuỗi s
document.write ("<BR>");
document.write(s.match(/th(?=u)/gi));//Kết quả: Th,th, vì 2 chữ này có
theo sau (?=) là u, là 2 chữ Thu, thu trong chuỗi gốc.
document.write ("<BR>");
document.write(s.match(/t(?!h)/gi));//Kết quả: t,t,T, vì 3 chữ này không
theo sau (?!) bởi chữ h, tương ứng với t , ti, Ti trong chuỗi gốc.
</script>
</head>
</html>
Các lớp ký tự trong regex:
[xyz]: Tìm một ký tự bất kỳ nằm trong tập ký tự giữa cặp dấu ngoặc vuông
[x-z]: Tìm một ký tự bất kỳ nằm trong tập ký tự từ x đến z
[^xyz]: Tìm một ký tự bất kỳ không thuộc tập ký tự giữa cặp dấu ngoặc vuông.
.: Tìm bất kỳ một ký tự nào không phải là ký tự xuống dòng mới (new line) hoặc ký tự kết thúc
dòng (line terminator).
w: Tìm một ký tự dạng a-Z, 0-9 và dấu gạch dưới.
W: Ngược lại với w
d: Tìm một ký tự thuộc tập ký tự từ 0 đến 9
D: Ngược lại với d: Tìm một ký tự không nằm trong tập ký tự từ 0 đến 9
s: Tìm ký tự cách (dấu cách)
S:Tìm một ký tự không phải là dấu cách
Ví dụ:
HTML Code:
<html>
<body>
<script type="text/javascript">
var str = "1 voi 1 la 2, 2 them 2 la 4";
// trả về mảng chứa các ký tự trong đoạn từ e tới h
document.write(str.match(/[e-h]/gi));//Kết quả: h,e, với h,e nằm trong chữ
them.
document.write ("<BR>");
// Trả về mảng các ký tự không thuộc tập các ký tự từ a-m và ký tự u:
document.write(str.match(/[^a-mu ]/gi));//Kết quả: 1,v,o,1,2,,,2,t,2,4
document.write ("<BR>");
// Tìm các chuỗi con bắt đầu bởi chữ oi, tiếp theo sau đó là 1 ký tự thuộc
lớp W:
document.write(str.match(/oiW/gi));//oi
document.write ("<BR>");
// Tìm các ký tự là các chữ số:
document.write(str.match(/d/gi));//1,1,2,2,2,4
document.write ("<BR>");
// Tìm các chuỗi bắt đầu bởi 1 ký tự thuộc lớp D, sau đó là 1 ký tự không
thuộc nhóm từ b-t:
document.write(str.match(/D[^b-t ]/g));//v, 1,la, 2, 2, 2,la, 4
document.write ("<BR>");
// Tìm các dấu cách:
document.write(str.match(/s/g));//, , , , , , , ,
</script>
</body>
</html>
Các phép lặp trong regex
RegEx cho phép tìm kiếm lặp bên trong biểu thức:
{x}: Lặp một ký tự hoặc một biểu thức con trước đó x lần
{x,y}: Lặp một ký tự hoặc một biểu thức con trước đó từ x đến y lần
{x,}: Lặp một ký tự hoặc một biểu thức con trước đó >= x lần
?: Lặp một ký tự hoặc một biểu thức con trước đó 0 hoặc 1 lần
*: Lặp một ký tự hoặc một biểu thức con trước đó >=0 lần
+: Lặp một ký tự hoặc một biểu thức con trước đó >=1 lần
Ví dụ:
HTML Code:
<html>
<body>
<script type="text/javascript">
var str = "Ai mua xoi deeeeee";
// Tìm một chuỗi bao gồm các chữ cái d hoặc e (lớp [de], lặp lại 3 lần:
document.write (str.match(/[de]{3}/g));//dee,eee
// Tìm một chuỗi bao gồm các chữ cái d hoặc e, lặp lại >=3 lần:
document.write (str.match(/[de]{3,}/g));//deeeeee
// Tìm một chuỗi bao gồm các chữ cái d hoặc e, lặp lại từ 3 đến 5 lần:
document.write (str.match(/[de]{3,5}/g))//deeee
// Tim chu d, sau chu d la 0 hoac 1 chu e
document.write (str.match(/de?/g));
// Tim chu d, sau chu d la 0 hoac n chu e
document.write (str.match(/de*/g));
// Tim chu d, sau chu d la 1 hoac n chu e
document.write (str.match(/de+/g));
//Tim tat ca cac tu bao gom cac chu cai tu a den z
document.write (str.match(/[a-z]*/gi));
//Tim tat ca cac tu bao gom cac chu cai tu a den z, sau tu la mot dau cach:
document.write (str.match(/[a-z]* +/gi));
</script>
</body>
</html>
Gộp nhóm các biểu thức
Chúng ta có thể sử dụng các dấu ngoặc tròn () để gộp nhóm như trong các biểu thức toán học
thông thường.
(): Tìm kiếm một nhóm các ký tự bên trong cặp dấu ngoặc và lưu vào chuỗi kết quả.
(?: ): Tìm kiếm chuỗi kết quả không chứa tập ký tự nằm trong cặp dấu ngoặc.
|: Phép toán hoặc, được sử dụng để kết hợp các mệnh đề với nhau vào chung một biểu thức
Ví dụ:
HTML Code:
<html>
<body>
<script type="text/javascript">
var str = "Email: mail@ttt.com, test@ttt.com.vn, sinhln@hnue.edu.vn";
// Tim tat ca cac dia chi email trong chuoi
document.write (str.match(/([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-
Z0-9]{2,4})+/gi));
//Tim tat ca cac so trong chuoi
str=" 12312 and 343 and 54q";
document.write (str.match(/[0-9]+/g));
// hoac
document.write(str.match(/d+/g));
</script>
</body>
</html>
Phần 2: Một số trường hợp ứng dụng
Qua phần đó, các bạn hẳn đã hiểu được regex là cái gì, và bước đầu có thể đọc hiểu được ý nghĩa
của một chuỗi regex. Bài này đi vào tìm hiểu một số ví dụ ứng dụng regex để xử lý các bài toán
trong thực tiễn.
I. Tìm kiếm và thay thế
Hẳn các bạn đã biết, phương thức replace() trong Javascript nếu ở chế độ bình thường thì nó sẽ
chỉ tìm và thay thế được duy nhất chuỗi đầu tiên được tìm thấy.
VD:
Code:
<script language="javascript">
var str="chuoi 1, chuoi 2, chuoi 3";
document.write (str.replace ("chuoi","cam")); // Ket qua: cam 1, chuoi 2, chuoi 3
</script>
Vậy làm thế nào để thay thế được tất cả các từ "chuoi" thành "cam"?
Ở đây, chúng ta có thể sử dụng các phép tìm kiếm lặp của regex:
HTML Code:
<script language="javascript">
var str="chuoi 1, chuoi 2, chuoi 3";
// Chuỗi cần tìm là 1 regex: /chuoi/gi, xác định tìm kiếm từ chuoi lặp lại
cho đến cuối chuỗi gốc và không phân biệt hoa thường
document.write (str.replace (/chuoi/gi,"cam")); // Ket qua: cam 1, cam 2, cam
3
</script>
II. Hỗ trợ kiểm tra dữ liệu theo mẫu regex
Ở đây các bạn cần làm quen với một phương thức trong lớp RegExp của javascript, đó là phương
thức test().
Cú pháp:
biến_regex.test(chuỗi_gốc)
Phương thức này trả về true nếu như chuỗi gốc khớp với giá trị trả về của biến_regex. Ngược lại
là false.
Ví dụ:
HTML Code:
<script language="javascript">
// Khai báo 1 chuỗi thông thường
var str="Hello world!";
//Khai báo 1 chuỗi mẫu (biểu thức regex)
var patt=/Hello/g;
var result=patt.test(str);
document.write("Ket qua: " + result); // Tra ve true vi tim thay tu Hello
trong chuoi str
//Một mẫu chuỗi khác
patt=/phpvn/g;
result=patt.test(str);
document.write("<br />Ket qua: " + result); // Tra ve false vi khong thay
chuoi phpvn trong chuoi str.
</script>
a. Kiểm tra xem chuỗi nhập vào có phải là 1 số hay không?
Bình thường, chúng ta có thể sử dụng các hàm kết hợp như: isNaN, parseInt, parseFloat… để
kiểm tra xem đó có phải là một số hay không? Ở đây tôi cung cấp một cách khác dùng regex:
Đoạn mã dưới đây sẽ chỉ kiểm tra xem đây có phải là 1 số nguyên dương hay không:
HTML Code:
<script language="javascript">
function phpvn_isDigit(myString)
{
var reg = /^d+$/;
return (reg.test(myString));
}
document.write (phpvn_isDigit("12345"));
</script>
Đoạn mã dưới đây sẽ kiểm tra xem có phải là đầu vào là 1 số nguyên hay ko (có thể có thêm dấu
+/- ở trước):
HTML Code:
function phpvn_isInt(myString)
{
var reg= /^(+|-)?d+$/;
return (reg.test(fData));
}
Tiếp tục nâng cấp kiểm tra xem chuỗi đầu vào có phải là một số thực hay không.
Một chuỗi được coi là 1 số thực nếu như nó bắt đầu bởi 1 chuỗi số, có 1 dấu chấm ở giữa và kết
thúc bởi 1 chuỗi số:
HTML Code:
function phpvn_isFloat(myString)
{
var reg= /^(+|-)?((d+(.d+)?)|([0].d+))$/;
return (reg.test(myString));
}
Nhưng mẫu chuỗi trên sẽ trả về false nếu người dùng gõ 1 chuỗi dạng 123,123,123.45
Nguồn: phpvn.org
Tags: Xửlý chuỗi bằng Javascript - Regular Expression
No Response to “Xử lý chuỗi bằng Javascript – Regular Expression”
Comments are closed.
Sửdụng Regular Expression trong Javascript
Bắt đầu từ phiên bản Javascript 1.2 thì Regular Expression đã được tích hợp sẵn. Do đó từ
trình duyệt Internet Explorer 4.0 trở về sau, Netcapse 4.0 trở về sau, tất cả các phiên bản của
Mozilla Firefox, các trình duyệt phổ biến hiện nay như Chrome, Opera, Safari... đều sử dụng
Javascript>= 1.2 do đó ta đều có thể sử dụng Regular Expression trên các trình duyệt vừa nêu.
Khi có nhu cầu kiểm tra tính hợp lệ của dữ liệu, tìm kiếm hoặc thay thế các dữ liệu theo một
nguyên tắc nào đó thì sử dụng Regular Expression sẽ giúp ta tiết kiệm được rất nhiều thời gian.
ECMA là viết tắt của tổ chức: "European Computer Manufacturers Association" được thành lập vào năm
1959. Truy cập ecma-internation.org để biết thêm thông tin.
Nói thêm về quá trình đưa Regular Expression vào Javascript. Bắt đầu từ phiên bản ECMA-
262 thì Regular Expression được công nhận là một thành phần chuẩn trong ngôn ngữ. Do đó
các ngôn ngữ lập trình phát triển trên yêu cầuđặc tả của bản ECMA-262 thì đều hổ trợ Regular
Expression. Phiên bản Javascript 1.2 là phiên bản phát triển dựa trên bản đặc tả ECMA-262 do
đó hổ trợ sẵn Regular Expression. Ngoài Javascript còn có rất nhiều ngôn ngữ khác phát triển
trên yêu cầuđặc tả của ECMA-262 mà phổ biến nhất hiện nay là Action Script. Phiên bản
Action Script 3.0 hổ trợ đầy đủ đặc tả ECMA-262 do đó từ bản này chúng ta có thể sử dụng
Regular Expression hoàn toàn như trên Javascript.
Cách đị nh nghĩa Regular Expression trên Javascript
Sử dụng Javascript ta có thể viết theo cách như sau: /pattern/modifiers với pattern là mẫu mà
ta cần sử dụng, modifiers là các tham số tùy chọn thêm. Lưu ý là pattern là chuỗi bắt buộc còn
modifiers là tùy chọn. Cú pháp này dựa trên cú pháp của ngôn ngữ Perl. Dưới đây là một số từ
khóa modifers mà Javascript hổ trợ:
/g bật chế độ tìm kiếm toàn cục ("global" match). Khi ta sửdụng các hàm nhưreplace() thì ta
dùng tham số này để thay thế hết tất cả các chuổi khớp với điều kiện, ngược lại không sửdụng
thì chỉ thay thế cho chuổi đầu tiên khớp với điều kiện. (Nếu bạn đã sửdụng PHP thì khi có tham
số /g trong Javascript tương ứng với bên PHP là hàm preg_match_all() còn không có tham số này
thì tương ứng là hàm preg_match
/i bật chế độ tìm kiếm phân biệt hoa thường.
/m bật chế độ tìm kiếm trên nhiều dòng. Mặc đị nh Javascript chỉ tìm kiếm trên một dòng dù dữ
liệu ta sửdụng là nhiều dòng.
Chúng ta có thể viết gọn các tham số này. Thay vì /i/g/m ta có thể sử dụng /igm.
Một số lưu ý khi khai báo Regular Expression:
Không sửdụng A và Z để tìm ký tựđầu dòng và kết thúc dòng nhưPerl, chúng ta sửdụng ^ và $
để thay thế
Chưa hổ trợtìm kiếm ngược đầy đủ, sẽ có bài nói kỹ hơn về vấn đề này. Hổ trợđầy đủ tìm kiếm
thuận
Không hổ trợUnicode, trừtrường hợp ta tìm chính xác từng ký tựtheo mã ví dụ nhưuFFFF
Không hổ trợđiều kiện trong chuỗi "pattern"
Không hổ trợchú thích trong chuỗi "pattern". Để chú thích cho đoạn mẫu của chúng ta hãy sử
dụng // ởbên ngoài.
Chú thích thêm: Khi khai báo bằng cách này thực chất là chúng ta sử dụng cách viết tắt của
Javascript. Cách viết này là thay thể cho cụm từ new RegExp() trong Javascript. Ví dụ về việc
dùng đầy đủ như sau:
var test = /pattern/ tương đương với var test = new RegExp("pattern")
var test = /pattern/modifiers tương đương với var test = new RegExp("pattern",
"modifiers")
Một số hàm xử lý chuỗi sử dụng Regular Expression
Cách đơn giản nhất là ta sử dụng hàm match() để kiểm tra. Ví dụ: if
(myString.match(/regex/)) { /** Tìm thấy chuổi cần tìm **/ }
Để tìm và thay thế chuổi, ta sử dụng hàm replace() theo cú pháp:
myString.replace(/replaceme/g, "replacement"); Chú ý lúc sử dụng hàm này ta nên sử
dụng tham số /g để tìm và thay thế đầy đủ hết, tham số thứ 2 của hàm là một chuổi bình thường
ta cần thay thế. Để sử dụng lại chính chuỗi ta tìm thấy để sử dụng lại trong lúc thay thế, ta sử
dụng các ký tự từ $1 đến $9 để làm, với các con số chính là vị trí được tìm thấy của một cụm từ
tương ứng với "pattern" mà ta đã nhập vào theo các điều kiện.
Cuối cùng, hàm split() cũng hổ trợ Regular Expression. Ví dụ: var myArray =
myString.split(/,/);
Các hàm trong đối tượng Regular Expression
Khi khai báo một chuổi Regular Expression (Đa số chúng ta dùng cách rút gọn) thì chúng ta đã
tạo ra một đối tượng RegExp, với các hàm được định nghĩa như sau:
test() Hàm này sẽ kiểm tra tham số truyền vào có trùng với chuỗi "pattern" mà ta đã định nghĩa
hay không. Hàm trả về giá trị true nếu chuỗi nhập vào có mẫu ta cần tìm và false nếu tìm không
thấy.
exec() Hàm này trả về một mảng chứa các đoạn trùng khớp với "pattern" chúng ta định nghĩa và
trả về null nếu không tìm thấy.
Chúng ta còn có thể sử dụng rút gọn mà không cần khai báo chuổi Regular Expression. Ví dụ:
/d/.test(subject) là cách viết nhanh để kiểm tra xem trong chuỗi subject ta nhập vào có
con số nào không.
Regular Expressions trong PHP [PHP]
1. Giới thiệu
Regular Expression là gì?
+ Biểu thức chính quy.
+ Hiểu nôm na là 1 chuỗi có quy tắc để mô tả những chuỗi(string) khác.
Làm việc với string thường rất vất vả và đòi hỏi độ chính xác cao. với Regular Expression trong PHP, công
việc này được đơn giản đi rất nhiều. 1 dòng code trong PHP làm việc với string trong trường hợp này có
thể sánh với hàng trang code trong các ngôn ngữkhác.
Ta có thể ứng dụng những đoạn code đơn giản ởtrên vào các form đòi hỏi nhập dữliệu, thông tin người
dùng, ... hay dùng để lọc các biến được truyền.
2. Hàm preg_match trong PHP
Trong PHP có một hàm là preg_mathch(string pattern, string subject). Hàm này trả về 1 nếu đúng quy
tắc so mẫu, trả về 0 nếu sai quy tắc so mẫu.
Với:
string pattern: là biểu thức dùng để so mẫu. Các chuỗi được so mẫu phải tuân thủ quy tắc của biểu thức
này.
string subject: là chuỗi được so mẫu.
Một pattern (biểu thức so mẫu) có dạng:
$pattern = "/ thiết_lập quy_tắc_ởđây /";
Biểu thức so mẫu nằm giữa hai dấu "/", và hai dấu "/" này nằm trong cặp nháy đôi.
Để viết regular expression ta cần làm quen với những ký tựcó { nghĩa đặc biệt trong một regular
expression đó là các Meta symbols
Meta Symbols Ý nghĩa
^ Bắt đầu dòng (string)
$ Kết thúc dòng (string)
. Đại diện cho một ký tựbất kz
+
Lặp lại ký tựhay cụm ký tựđứng trước nó (>=1)
Ví dụ: a+ : nghĩa là lặp lại chữa và phải có ít nhất là một chữa. Do vậy mới ghi >=1 cho dễ
hiểu.
- 123a: 1(đúng)
- 123aa: 1(đúng)
- 123 : 0(sai). vì không có chữa nào được lặp.
*
Cũng là lặp lại ký tựhay cụm ký tựđứng trước nó (>=0)
Ví dụ: a* : nghĩa là lặp lại chữa, nếu không có chữa cũng không sao. Do vậy mà >=0
-123a: (1)
-123aaa: (1)
-123: (1). Không có chữa cũng không sao.
? Tồn tại hay không tồn tại ký tựhay cụm ký tựđứng trước nó

Dấu  đi kèm với 1 meta symbol sẽ làm mất { nghĩa của meta symbol đó - trả về symbol
bình thường.
Ví dụ:
$patern = "/.../"; (trong dấu...ta thay các biểu thức sau)
^a : Bắt đầu của dòng là ký tựa. Dòng này có thể là abcd, aaaa, a4684,.... miến sao bắt đầu bằng ký tựa.
^string$ : Dòng này mang giá trị cứng là string vì nó bị chặn giữa ^ và $. Nghĩa là chỉ có chữstring mới
đúng, còn lại thì sai hết.
Từbây giờthì ta sẽ sửdụng: $pattern = "/^...$/"; ^ :bắt đầu một dòng, $ :kết thúc một dòng
a. :có thể mang giá trị : ab, a1, au, af .Nhưng không thể là abc, ab1, vì dấu . chi đại diện cho một ký tự!
ax+ :biểu diễn cho dòng: ax, axx, axxxx - nhưng không thể là "a" vì + đại diện cho >=1 ký tự.
ay* :biểu diễn cho dòng: a, ay, ayy, ayyyyyyyyy,....
ab? :biểu diễn cho: a, ab (b có thể có hoặc không)
a+b :biểu diễn cho dòng: "a+b"
Cách biểu diễn sốvà chữcái
d : Biểu diễn một con sốbất kz.
Ví dụ:
$reg5="/^d$/"; // chi co 1 chu so
$reg5a="/^dd$/"; // chi co 2 chu so
$reg5b = "/^10Adddddd$/"; // 10A123456
D : Ký tựbất kz không phải là chữsố(ngược với d)
Ví dụ:
$reg = "/^D$/"; // bieu dien mot ky tu bat kỳ khong phai la so
$reg ="/^dDdD$/"; bieu dien mọt chuoi co dang 1a2b. Với a,b là ký tự bất
kỳ khong phai la so
w - Ký tựtừa-z, A-Z, hoặc 0-9
Ví dụ:
$reg6 = "/^www$/"; // chi gom 3 ky tu từ a->z, A->Z, 0->9. Khong co ky tu
dac biet
$reg7 ="/^w+@w+.w+$/"; // kiem tra email teo@yahoo.com
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)
Nghĩa là chỉ chứa các ký tựđặc biệt
Ví dụ:
$reg = "/^W$/"; // chua mọt ký tu khong thuoc tù a-z , A-Z, 0-9
s+ - Có nghĩa: có >=1 khoảng trắng.
Ví dụ:
$reg ="/^w+sd+$/"; // bieu dien a 1, g 22, abc 123
Ý nghĩa các dấu ngoặc tròn, ngoặc nhọn, ngoặc vuông
Ngoặc tròn: () : dùng để gom các ký tựthành một nhóm
Ví dụ:
$reg = "/^d(ab)+$/"; bieu dien 1ab, 1abab, 1ababab. Lặp lại ab vô hạn
Ngoặc nhọn {}: dùng để lặp ký tựhay cụm ký tựđứng trước nó với sốlượng xác
đị nh
+ {3}: lặp lại chỉ 3 lần.
+ {3,}: lặp lại >=3.
+ {3,10}: lặp lại từ3 đến 10 lần.
Ví dụ:
$reg8 = "/^d{3}$/"; // lap chi 3 so
$reg8a = "/^d{3,}$/"; // lap >=3
$reg9 = "/^a(xy){2,}$/"; // lap xy toi thieu tu 2 lan tro len
$reg9a = "/^a(xy|12){2,}$/"; // lap xy hoac 12 toi thieu 2 lan tro len
Dấu gạch thẳng đứng để lựa chọn hoặc cái này hoặc cái kia
Ví dụ:
$reg16 = "/^[a-zA-Z0-9]+.(jpg|png|gif|jpeg|JPG|PNG|GIF|JPEG)$/"; // kiem tra
file hinh co duoi khac nhau
Dấu ngoặc vuông để chỉ đoạn ký tựcho phép
+ [a-z] : chỉ các chữtừa đến z
+ [A-Z] : chỉ các chữtừA đến Z
+ [0-9] : chỉ các sốtừ0-9
+ [a-zA-z0-9] : các chữtừa-z, A-Z, 0-9
Ví dụ:
$reg13 = "/^[3-7]$/"; // chi co 1 so trong khoang tu 3 den 7
3. Hàm preg_replace trong PHP
Hàm này dùng để tìm một string theo quy tắc và thay thế string đó theo mình muốn.
Cú pháp:
preg_replace(mixed regex, mixed replace, mixed subject);
mixed regex: biểu thức so mẫu
mixed replace: mẫu thay thế.
mixed: chuỗi mẹ
Ví dụ:
preg_replace("/(d{3})/","<u>$1</u>","abc 123 efg");
Tìm chuỗi 123 và gạch dưới nó. Kết quả abc 123 efg
Chú ý:
- Cứ1 nhóm trong dấu ngoặc tròn được đại diện bằng các biến $ là được đánh dấu lần lượt từtrái sang
phải, bắt đầu là $1, tiếp theo là $2 , $3...
- Nếu thay thế nó bằng một cái khác thì không có $1, $2, $3...Còn nếu chỉ thay đổi nó thì dùng $1, $2,
$3.. nhưví dụởtrên.
Ví dụ
preg_replace("/^<div(s+)(id='teo')?>(s+)?(.*)(s+)?</div>$/","<b><u
>$4</u></b>","<div id='teo'> Nguyen Van Teo </div>");
Tìm <div id='teo'> Nguyen Van Teo </div> và thay đổi nó thành <b><u>Nguyen Van Teo</u></b>
Lưu ý:
Biểu thức so mẫu viết liền, không khoảng trắng. Nếu chuỗi mẹ có khoảng trắng thì mình thêm vào biểu
thức so mẫu là (s+). Khi đó nhớđếm cụm dấu ngoặc để xác đị nh biến $ cho chính xác.
4. Hàm preg_split trong PHP
Hàm này có tác dụng cắt chuỗi giống nhưhàm explore, nhưng hàm explore phải kiếm đúng theo k{ tự,
còn hàm này kiếm theo quy tắc
Cú pháp:
preg_split(string pattern, string subject);
string pattern: biểu thức so mẫu
string subject: chuỗi mẹ
Chú ý:hàm này trả về một mảng
Ví dụ:
$macth = preg_split("/#/","abc#123#efg");
print_r($macth);

Weitere ähnliche Inhalte

Was ist angesagt?

Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPTBài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPTMasterCode.vn
 
Tu dong dat hang tu he thong ban le lon nhat trung quoc
Tu dong dat hang tu he thong ban le lon nhat trung quocTu dong dat hang tu he thong ban le lon nhat trung quoc
Tu dong dat hang tu he thong ban le lon nhat trung quochazzaz
 
Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Đặng Til
 
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầu
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầuTài liệu tìm hiểu jQuery dành cho người mới bắt đầu
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầuLel Đặng Văn
 
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vnNguyen Van Hung
 
Bài 6: Tạo hiệu ứng và validate Form - Giáo trình FPT
Bài 6: Tạo hiệu ứng và validate Form - Giáo trình FPTBài 6: Tạo hiệu ứng và validate Form - Giáo trình FPT
Bài 6: Tạo hiệu ứng và validate Form - Giáo trình FPTMasterCode.vn
 
Phan thai trung tu dong dat hang tu he thong ban le lon nhat trung quoc
Phan thai trung   tu dong dat hang tu he thong ban le lon nhat trung quocPhan thai trung   tu dong dat hang tu he thong ban le lon nhat trung quoc
Phan thai trung tu dong dat hang tu he thong ban le lon nhat trung quocTrung Phan Thai
 
05 - Phan Thai Trung - Tu dong dat hang tu he thong ban le lon nhat Trung Quoc
05 - Phan Thai Trung - Tu dong dat hang tu he thong ban le lon nhat Trung Quoc05 - Phan Thai Trung - Tu dong dat hang tu he thong ban le lon nhat Trung Quoc
05 - Phan Thai Trung - Tu dong dat hang tu he thong ban le lon nhat Trung QuocNguyen Duc Phu
 
Session 08 Final
Session 08 FinalSession 08 Final
Session 08 FinalSamQuiDaiBo
 
Tu hoc javascript
Tu hoc javascriptTu hoc javascript
Tu hoc javascriptzingoncmu2
 
Giao trinh java script
Giao trinh java scriptGiao trinh java script
Giao trinh java scripthieusy
 
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất NghệMvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất NghệMasterCode.vn
 
Chuong 3 windows forms
Chuong 3   windows formsChuong 3   windows forms
Chuong 3 windows formsHarees Seni
 
Session 10 Final
Session 10 FinalSession 10 Final
Session 10 FinalSamQuiDaiBo
 
Hoc Jquery Trong 1h
Hoc Jquery Trong 1hHoc Jquery Trong 1h
Hoc Jquery Trong 1hDang Tuan
 

Was ist angesagt? (18)

Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPTBài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
Bài 7: Thư viện jQuery và thư viện jQuery UI - Giáo trình FPT
 
Tu dong dat hang tu he thong ban le lon nhat trung quoc
Tu dong dat hang tu he thong ban le lon nhat trung quocTu dong dat hang tu he thong ban le lon nhat trung quoc
Tu dong dat hang tu he thong ban le lon nhat trung quoc
 
Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Slide3 - Co ban HTML5
Slide3 - Co ban HTML5
 
Giao Trinh Jquery
Giao Trinh JqueryGiao Trinh Jquery
Giao Trinh Jquery
 
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầu
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầuTài liệu tìm hiểu jQuery dành cho người mới bắt đầu
Tài liệu tìm hiểu jQuery dành cho người mới bắt đầu
 
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
 
Bài 6: Tạo hiệu ứng và validate Form - Giáo trình FPT
Bài 6: Tạo hiệu ứng và validate Form - Giáo trình FPTBài 6: Tạo hiệu ứng và validate Form - Giáo trình FPT
Bài 6: Tạo hiệu ứng và validate Form - Giáo trình FPT
 
Phan thai trung tu dong dat hang tu he thong ban le lon nhat trung quoc
Phan thai trung   tu dong dat hang tu he thong ban le lon nhat trung quocPhan thai trung   tu dong dat hang tu he thong ban le lon nhat trung quoc
Phan thai trung tu dong dat hang tu he thong ban le lon nhat trung quoc
 
05 - Phan Thai Trung - Tu dong dat hang tu he thong ban le lon nhat Trung Quoc
05 - Phan Thai Trung - Tu dong dat hang tu he thong ban le lon nhat Trung Quoc05 - Phan Thai Trung - Tu dong dat hang tu he thong ban le lon nhat Trung Quoc
05 - Phan Thai Trung - Tu dong dat hang tu he thong ban le lon nhat Trung Quoc
 
Session 08 Final
Session 08 FinalSession 08 Final
Session 08 Final
 
Tu hoc javascript
Tu hoc javascriptTu hoc javascript
Tu hoc javascript
 
Asp control
Asp controlAsp control
Asp control
 
Giao trinh java script
Giao trinh java scriptGiao trinh java script
Giao trinh java script
 
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất NghệMvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
 
Chuong 3 windows forms
Chuong 3   windows formsChuong 3   windows forms
Chuong 3 windows forms
 
Session 10 Final
Session 10 FinalSession 10 Final
Session 10 Final
 
Joo
JooJoo
Joo
 
Hoc Jquery Trong 1h
Hoc Jquery Trong 1hHoc Jquery Trong 1h
Hoc Jquery Trong 1h
 

Ähnlich wie Kiem tra javascript

Tai lieu huong_dan_ve_lap_trinh_php_7512
Tai lieu huong_dan_ve_lap_trinh_php_7512Tai lieu huong_dan_ve_lap_trinh_php_7512
Tai lieu huong_dan_ve_lap_trinh_php_7512lekytho
 
Hàm (function)
Hàm (function)Hàm (function)
Hàm (function)Son Nguyen
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoHuy Nguyễn
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoBác Luân
 
Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0Trần Thiên Đại
 
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì?  9 Thứ thú vị có thể làm với PHPPHP có thể làm gì?  9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHPNIIT - ICT Hà Nội
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++ptquang160492
 
Haiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sqlHaiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sqlGiang Nguyễn
 
Giao trinh thiet ke web bai 4 - php
Giao trinh thiet ke web   bai 4 - phpGiao trinh thiet ke web   bai 4 - php
Giao trinh thiet ke web bai 4 - phpcashdeptrai
 
Câu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHPCâu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHPZendVN
 
Giáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtGiáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtMôi Trường Việt
 
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptxngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptxssuser49db3c1
 

Ähnlich wie Kiem tra javascript (20)

Kiem tra Javasrctip
Kiem tra JavasrctipKiem tra Javasrctip
Kiem tra Javasrctip
 
Lesson 2 lý thuyết
Lesson 2 lý thuyếtLesson 2 lý thuyết
Lesson 2 lý thuyết
 
Asp
AspAsp
Asp
 
Tai lieu huong_dan_ve_lap_trinh_php_7512
Tai lieu huong_dan_ve_lap_trinh_php_7512Tai lieu huong_dan_ve_lap_trinh_php_7512
Tai lieu huong_dan_ve_lap_trinh_php_7512
 
Hàm (function)
Hàm (function)Hàm (function)
Hàm (function)
 
Php Csdlweb06
Php Csdlweb06Php Csdlweb06
Php Csdlweb06
 
Chuong 01
Chuong 01Chuong 01
Chuong 01
 
Chuong 01 mo dau
Chuong 01 mo dauChuong 01 mo dau
Chuong 01 mo dau
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_cao
 
Lap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_caoLap trinh c_tu_co_ban_den_nang_cao
Lap trinh c_tu_co_ban_den_nang_cao
 
Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0
 
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì?  9 Thứ thú vị có thể làm với PHPPHP có thể làm gì?  9 Thứ thú vị có thể làm với PHP
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++
 
Phong cach lap trinh c++
Phong cach lap trinh c++Phong cach lap trinh c++
Phong cach lap trinh c++
 
Haiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sqlHaiphongit.com.tai lieu-learning-php-my sql
Haiphongit.com.tai lieu-learning-php-my sql
 
Giao trinh thiet ke web bai 4 - php
Giao trinh thiet ke web   bai 4 - phpGiao trinh thiet ke web   bai 4 - php
Giao trinh thiet ke web bai 4 - php
 
PHP Regular expressions
PHP Regular expressionsPHP Regular expressions
PHP Regular expressions
 
Câu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHPCâu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHP
 
Giáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việtGiáo trình c++ full tiếng việt
Giáo trình c++ full tiếng việt
 
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptxngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
ngon-ngu-lap-trinh-python_C1_cac_khai_niem_(PI).pptx
 

Kiem tra javascript

  • 1. Lớp đối tượng RegEx và cách validate các form bằng javascript 14 Mar Như bài viết Thẻ iframe và những lưu ý đã đề cập, trong javascript có sẵn một lớp đối tượng hàm RegEx cho phép chúng ta kiểm tra các chuỗi ký tự và validate một cách nhanh chóng mà không cần viết thêm các hàm xử lý chuỗi. Trong bài này chúng ta sẽ cùng tìm hiểu cơ chế RegEx và một số ứng dụng validate dữ liệu. Trước hết chúng ta thử chạy đoạn code html sau đây: Khi chạy chúng ta sẽ thấy là nếu chúng ta nhập vào chữ số hoặc ký tự đặc biệt, java sẽ cảnh báo bằng lệnh alert ở dòng 10. còn nếu nhập đúng tên thì chúng ta sẽ thấy chương trình cho ra một câu chào. Cơ chế làm việc của RegEx ở đây cũng giống như với các hàm PCRE của PHP chỉ khác một chút về cách trình bày, còn quy ước về mẫu tìm kiếm, so sánh thì như nhau. Với java, bạn chỉ cần tạo ra một biến ký tự, trong ví dụ trên là filter và gán bằng chuỗi mẫu filter=/[a-zA-z]+$/ Sau đó bạn dùng một trong các phương thức sẵn có của đối tượng biến vừa tạo. Đó là .search(), .match(), .replace() hoặc .test() .match() và .test() là hai phương thức ngược nhau. .match là phương thức của chuỗi tìm kiếm còn .test là phương thức của chuỗi mẫu (pattern). Hãy xem đoạn code dưới đây, so sánh với đoạn code trên thì bạn có thể tự rút ra kết luận:
  • 2. Các điều kiện nằm ngoài / / của mẫu tìm kiếm cũng khá giống với PCRE, đó là: i – tìm kiếm không phân biệt chữ hoa chữ thường g – tìm kiếm từ đầu chuỗi đến cuối chuỗi Ví dụ đoạn code sau đây in ra 3 chữ T,t,t vì có điều kiện i,g Các điều kiện nằm bên trong / / cũng vậy: ^ – trả về kết quả nếu chuỗi mẫu được tìm thấy ở đầu chuỗi gốc $ – trả về kết quả nếu chuỗi mẫu được tìm thấy ở cuối chuỗi gốc w – tìm ký tự là chữ cái, chữ số hoặc dấu gạch dưới d – tìm ký tự là chữ số
  • 3. s – tìm ký tự là dấu cách Chạy đoạn code sau đây bạn sẽ thấy rõ điều đó: Chúng ta cũng có một số lệnh xác định số lần xuất hiện (lặp lại) của các ký tự tìm kiếm gần giống với PCRE {x}: Lặp một ký tự hoặc một biểu thức con trước đó x lần {x,y}: Lặp một ký tự hoặc một biểu thức con trước đó từ x đến y lần {x,}: Lặp một ký tự hoặc một biểu thức con trước đó >= x lần ?: Lặp một ký tự hoặc một biểu thức con trước đó 0 hoặc 1 lần *: Lặp một ký tự hoặc một biểu thức con trước đó >=0 lần +: Lặp một ký tự hoặc một biểu thức con trước đó >=1 lần Ví dụ minh họa dưới đây
  • 4. Chúng ta có thể sử dụng các dấu ngoặc tròn () để gộp nhóm như trong các biểu thức toán học thông thường. (): Tìm kiếm một nhóm các ký tự bên trong cặp dấu ngoặc và lưu vào chuỗi kết quả. (?: ): Tìm kiếm chuỗi kết quả không chứa tập ký tự nằm trong cặp dấu ngoặc. |: Phép toán hoặc, được sử dụng để kết hợp các mệnh đề với nhau vào chung một biểu thức Ví dụ sau đây dùng () để tìm các địa chỉ email trong một chuỗi Cuối cùng chúng ta thử sử dụng phương thức .replace để thay thế một mẫu trong chuỗi bằng ví dụ sau:
  • 6. Gửi mail với PHP 31 May Một function cơ bản mà các website thường dùng là có một form liên hệ để người viếng thăm có thể gửi mail trực tiếp đến người quản trị website. Vậy các coder xử lý vấn đề này ra sao khi xây dựng website. Bài viết này sẽ giải thích về cơ chế làm việc của mail và ứng dụng gửi mail trong PHP. Cơ chế làm việc của email Bản chất của email là hai dịch vụ độc lập một gửi, một nhận và thường được cài đặt trên cùng một server. Có nhiều giao thức khác nhau cho việc gửi, nhận mail nhưng thông dụng nhất là POP3 cho việc nhận mail và SMTP cho việc gửi mail. Một SMTP server khi gửi mail đi thông thường không cần có account. Bất cứ khi nào nó nhận được yêu cầu từ một client nào đó tuân thủ theo đúng cấu trúc của nó, thường là mail header, mail subject, và mail content và receipient (địa chỉ email của người nhận) là nó sẽ lập tức tìm cách kết nối với POP server để gửi cái mail đó đi. Còn một POP server thì khác, nó quản lý cả một database các địa chỉ email và mật khẩu do người quản trị khởi tạo ra và cấp phát cho người dùng. Khi nhận được một email nó sẽ căn cứ theo địa chỉ người nhận để chuyển đến đúng hòm thư của người đó. Một điểm lý thú là đa phần các hosting hiện nay đều có kèm theo các dịch vụ mail POP và SMTP, chẳng hạn như Cpanel và Direct admin dùng dịch vụ mail Dovecot. Do đó khi bạn mua hosting bạn có quyền tạo ra các email gắn luôn với tên miền của bạn chẳng hạn như abc@congty.com. Nhờ dịch vụ miễn phí này nên bạn hoàn toàn có thể dùng hàm mail() của PHP trên các hosting này để tạo ra các form liên hệ cho phép khách hàng viếng thăm website của bạn có thể gửi mail trực tiếp đi từ website. Sử dụng hàm mail() của PHP. Trước hết chúng ta viết đoạn code sau đây để tạo một form liên hệ và gọi đến hàm mail() để gửi mail đi sau khi nhấn SEND
  • 7. Sau khi có đoạn code này nếu bạn upload lên một hosting thì nó sẽ chạy ngay lập tức. Vì như đã nói ở trên, hầu hết các hosting hiện nay đều hỗ trợ dịch vụ POP/SMTP. Lưu ý, trong code dòng 12 tôi để địa chỉ nhận email là info@thuonghieuweb.com, các bạn cần thay bằng địa chỉ email của mình để có thể test việc nhận mail này.
  • 8. Tuy nhiên với những bạn không có hosting hoặc là đang phát triển trên môi trường local, sử dụng xamp hoặc wamp làm server thì đoạn code này chạy sẽ báo lỗi. Lý do là trên xamp và wamp không có kèm theo dịch vụ mail. Để vượt qua các lỗi này và test chúng ta làm như sau: Bước một: tìm một website nào đó mà server ở đó chấp nhận việc gửi mail bằng giao thức SMTP mà không cần xác thực. Tôi đã tìm được một cái, đó là http://www.vnpec.com.vn các bạn có thể dùng tạm để test. Bước hai: chỉnh sửa file php.ini trong wamp hoặc xamp với 3 dòng sau: [mail function] SMTP = http://www.vnpec.com.vn smtp_port = 25 sendmail_from = contact@vnpec.com.vn Bước 3: Chạy test lại đoạn code trên ở local. Khai báo header Trong khi chạy đoạn code trên, các bạn sẽ thấy có một phiền toái nhỏ đó là email mà bạn dùng để gửi nhờ thư sẽ xuất hiện trong trường from. Như vậy sẽ không chuyên nghiệp lắm. Còn nếu bạn chạy trên hosting thì hòm mail này sẽ có tên là root@localhost hay bất cứ một cái email default nào đó của SMTP tạo ra. Điều này khiến bạn không reply cho người điền form được. Để khắc phục vấn đề này chúng ta dùng thêm tham số header cho hàm mail(). Hãy chèn đoạn mã sau đây vào trong code, thay thế cho dòng số 13 $headers = „MIME-Version: 1.0′ . “rn”; $headers .= „Content-type: text/html; charset=utf-8′ . “rn”; $headers .= „From: „.$name.‟ <‟.$from.‟>‟ . “rn”; if(mail($to, $subject, $content, $headers)) Rồi chạy thử bạn sẽ thấy kết quả! Kết luận: - Việc sử dụng mail() của PHP để gửi mail có thể tạo được các form liên hệ rất chuyên nghiệp - Tuy nhiên nó có rắc rối khi test thử với môi trường phát triển là PC - Có một chút rắc rối với trường from và được khắc phục bằng cách thay thế header của mail - Không dùng được với các SMTP server đòi hỏi phải xác thực user trước khi gửi mail Bên cạnh hàm mail() chúng ta còn một công cụ khác cực mạnh là class phpmailer. PHPmailer sẽ giúp giải quyết tất cả các rắc rối trên trong code mà không thèm đụng đến PHP ini file. Tôi sẽ đề cập đến việc sử dụng công cụ này trong một bài viết khác Hẹn gặp lại TH
  • 9. Bạn muốn tạo nút Like và Dislike giống như youtube mà không cần phải load lại trình duyệt. Bài viết sau sẽ giúp bạn làm được điều đó hết sức đơn giản sử dụng jQuery và Ajax. I. Database Đầu tiên tạo một cái db đã. Db này dùng để lưu Id, nội dung tin, và up – like, down – dislike.Với mỗi một lần click tương ứng thì giá trị sẽ cộng thêm 1 HTML: CREATE TABLE messages( id INT PRIMARY KEY AUTO_INCREMENT, message TEXT, up INT, down INT); II.Index.php File này bao gồm mã PHP, Jquery, HTML.$(“.like”).click(function(){} là hàm xử lý sự kiện click nút có class là like. Ở đây chúng ta cho 2 nút up và down đều có class là like. Sau đó chúng ta lấy ra giá trị id và name của nó bằng $(this).attr(“id”);. Sau khi lấy được thành công thì truyền dữ liệu qua file rating.php sử dụng ajax. Nếu đang trong tiến trình xử lý thì #flash sẽ được hiện ra.Thành công sẽ cho hiện ra #content HTML: <script type="text/javascript" src="http://ajax.googleapis.com/ ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $(".like").click(function() { var id=$(this).attr("id"); var name=$(this).attr("name"); var dataString = 'id='+ id + '&name='+ name; $("#votebox").slideDown("slow"); $("#flash").fadeIn("slow"); $.ajax ({ type: "POST", url: "rating.php", data: dataString, cache: false, success: function(html) {
  • 10. $("#flash").fadeOut("slow"); $("#content").html(html); } }); }); // Close button action $(".close").click(function() { $("#votebox").slideUp("slow"); }); }); </script> //HTML Code <a href="#" class="like" id="1" name="up">Like</a> -- <a href="#" class="like" id="1" name="down">Dislike</a> <div id="votebox"> <span id='close'><a href="#" class="close">X</a></span> <div id="flash">Loading........</div> <div id="content"> </div> </div> III. Rating.php Trong file này chúng ta sẽ bắt request của user, và kiểm tra xem đó là like hay dislike để thực hiện update vào csdl. Sau đó thực hiện tính tổng số like và dislike, thực hiện lấy % để hiển thị ra vạch màu tương ứng. Việc dùng % để đảm bảo khi dữ liệu ngày càng tăng thì 2 vạch màu sẽ không thể kéo dài mãi được. PHP: <?php include("db.php"); if($_POST['id']) { $id=mysql_escape_String($_POST['id']); $name=mysql_escape_String($_POST['name']); // Vote update mysql_query("update messages set $name=$name+1 where id='$id'"); // Getting latest vote results $result=mysql_query("select up,down from messages where id='$id'"); $row=mysql_fetch_array($result); $up_value=$row['up']; $down_value=$row['down']; $total=$up_value+$down_value; // Total votes $up_per=($up_value*100)/$total; // Up percentage $down_per=($down_value*100)/$total; // Down percentage //HTML output echo '<b>Ratings for this blog</b> ( '.$total.' total) Like :'.$up_value.' <div id="greebar" style="width:'.$up_per.'%"></div> Dislike:'.$down_value.' <div id="redbar" style="width:'.$down_per.'%"></div>'; } ?>
  • 11. Cuối cùng là mã CSS để cho nó đẹp, cái cuối cùng này là tùy bạn muốn nó hiển thị thế nào là do bạn design thôi. Code cơ bản để nó hoạt động tôi đã đưa bên trên hết rồi. HTML: #votebox { border:solid 1px #dedede; padding:3px; display:none; padding:15px; width:700px; -moz-border-radius: 6px; -webkit-border-radius: 6px; } #greebar { float:left; background-color:#aada37; border:solid 1px #698a14; width:0px; height:12px; } #redbar { float:left; background-color:#cf362f; border:solid 1px #881811; width:0px; height:12px; } #close { float:right; font-weight:bold; padding:3px 5px 3px 5px; border:solid 1px #333; -moz-border-radius: 6px; -webkit-border-radius: 6px; } Chúc bạn thành công! Theo camnhan
  • 12. Xử lý chuỗi bằng Javascript – Regular Expression Published July 22, 2013 in Học Css - Javascript Xử lý chuỗi bằng Javascript – Regular Expression Hướng dẫn sửdụng Xửlý chuỗi bằng javascript Regular Expression kiểm tra email, kiểm tra chuỗi, kiểm tra ký tự Phần 1: Lý thuyết 1. RegEx là gì? RegEx (Regular Expression) là một biểu thức thường được dùng để mô tả một mẫu chuỗi (string pattern). 2. Vậy, mẫu chuỗi là gì? Mẫu chuỗi, diễn giải thô ra có nghĩa là các chuỗi văn bản tuân thủ theo một quy luật sắp xếp (mẫu) nào đó. Ví dụ: - Một số được viết dưới dạng một chuỗi với các chữ số, có thể có chứa tối đa 1 dấu phẩy ở giữa. - Dữ liệu kiểu ngày tháng: Thường được viết theu mẫu: dd/mm/yyyy: Hai chữ số đầu tiên xác định ngày, tiếp theo là dấu gạch chéo, tiếp đến là 2 chữ số xác định tháng, tiếp theo là dấu gạch chéo và kết thúc bởi bốn chữ số xác định năm. - Địa chỉ email: xxx@yyy.zz.gìđó: Bao gồm 1 chuỗi văn bản được chia thành 2 phần: Phần user name và phần domain, 2 phần này cách nhau bởi dấu @. Phần domain có luật riêng theo cách đặt tên của domain… … 3. Khái niệm về biểu thức: Một biểu thức bao gồm các toán tử và các toán hạng Toán tử: Các phép toán (VD: cộng, trừ, nhân, chia, lặp, gộp, so sánh…) Toán hạng: Biến, giá trị được dùng để tính toán. 4. Vậy regex được dùng để làm gì và nó có tác dụng gì? Trong các kỹ thuật xử lý chuỗi (VD: Tìm kiếm, thay thế…) thông thường, chúng ta cần phải xác định các chuỗi tường minh để tìm kiếm. Các chuỗi này được gọi là từ khoá. Tuy nhiên, trong một số trường hợp ngoại lệ khác, chúng ta không thể chỉ định rõ chuỗi từ khoá đó, mà chỉ có thể mô tả được quy luật để sinh ra chuỗi từ khoá đó.
  • 13. VD: Làm thế nào để lấy được toàn bộ địa chỉ email trong một văn bản? Rõ ràng với câu hỏi này, bằng mắt thừong thì ta có thể lấy được, còn bằng con đường lập trình thông thường theo kiểu tìm kiếm bằng từ khoá là các địa chỉ email thì chúng ta … bó tay. Nhưng nếu có regex, chúng ta có thể thiết lập ra quy luật của một địa chỉ email và yêu cầu chương trinh tìm kiếm theo luật đó. Cú pháp khai báo regex trong JavaScript Chúng ta có thể khai báo biến chứa regex như sau: Mã: var tên_biến= /mẫu_chuỗi/cách_tìm; Tham số cách_tìm xác định cách thức tìm kiếm mẫu chuỗi, nó có thể chứa các giá trị sau đây: g: ("global" matching): Lặp lại quá trình tìm kiếm cho đến khi kết thúc chuỗi. Khi sử dụng phương thức replace(), giá trị này sẽ thay thế tất cả các cụm từ tìm thấy thay vì chỉ cụm từ đầu tiên. i: so sánh không phân biệt hoa thường. m: so sánh ở chế độ đa dòng. Có thể phối hợp nhiều cách_tìm. VD: gi. Cũng có thể không cần đưa tham số này vào Các phương thức có hỗ trợ regEx trong JavaScript: Giả sử có một biến chuỗi S: S.search(): Tìm chuỗi phù hợp với biểu thức đã cho và trả về vị trí của chuỗi đó S.match(): Tìm chuỗi theo mẫu và trả về một mảng các giá trị tìm thấy S.replace() Thay thế chuỗi bằng chuỗi khác phù hợp với mẫu tìm kiếm. … Các bạn có thể tìm hiểu cách sử dụng các hàm này trên mạng, ở đây tôi chỉ sử dụng hàm match để demo cách sử dụng regex. Nên nhớ, hàm match() này trả về một mảng các giá trị phù hợp với mẫu chuỗi cần tìm. Ví dụ đơn giản đầu tiên về regex: Đoạn mã dưới đây trả về mảng các chuỗi có chứa chữ thu: Mã: <html> <body> <script type="text/javascript"> var str = "Ngoai hien giot mua thu thanh thot roi"; var patt1 = /thu/; // Mẫu chuỗi xác định một chữ thu
  • 14. var result = str.match(patt1); document.write(result); // In ra chữ thu </script> </body> </html> Đoạn ví dụ thứ 2 chỉ tìm kiếm các mẫu chuỗi chứa duy nhất chữ t: HTML Code: <html> <head> <script> var s="Thu mot ti, thu hai Ti"; //regex: t/g xác định việc tìm kiếm tất cả các chuỗi là chữ t, //và tiến hành tìm từ đầu đến cuối chuỗi nhờ tham số cách tìm /g. document.write(s.match(/t/g)); //Kết quả: t,t,t //regex: t/gi xác định việc tìm kiếm tất cả các chuỗi là chữ t, //và tiến hành tìm từ đầu đến cuối chuỗi không phân biệt chữ hoa, chữ thường nhờ tham số cách tìm /gi. document.write(s.match(/t/gi)); //Kết quả: T,t,t,t,T </script> </head> </html> Các phép toán tìm kiếm theo vị trí ^: Trả về chuỗi kết quả trong trường hợp chuỗi này nằm ở vị trí đầu của chuỗi gốc $: Trả về chuỗi kết quả trong trường hợp chuỗi này nằm ở vị trí cuối của chuỗi gốc b: Trả về chuỗi kết quả trong trường hợp chuỗi này nằm ở vị trí đầu của một từ trong chuỗi gốc. Nếu cần so sánh ở vị trí cuối từ, hãy đặt biểu thức b ở vị trí cuối từ. B: Trả về chuỗi kết quả trong trường hợp chuỗi này không nằm ở vị trí đầu của một từ trong chuỗi gốc. (tuỳ thuộc vào vị trí đặt B ở đầu hoặc cuối một từ) ?=: Trả về chuỗi kết quả nếu theo sau chuỗi đó là một chuỗi nào đó được chỉ định trước ?!: Trả về chuỗi kết quả nếu sau chuỗi đó không phải là một chuỗi nào đó được chỉ định trước Ví dụ: HTML Code: <html> <head> <script> var s="Thu mot ti, thu hai Ti"; document.write(s.match(/^Thu/i)); //Kết quả: Thu, vì chữ Thu nằm ở đầu chuỗi s
  • 15. document.write(s.match(/t$/gi)); //Kết quả: null, vì ko tìm thấy chữ t nằm ở cuối chuỗi s document.write(s.match(/ti$/gi)); //Kết quả: Ti, vì chữ Ti nằm ở vị trí cuối chuỗi s và thoả mãn điều kiện tìm kiếm /gi (tìm toàn cục ko phân biệt chữ hoa, chữ thường) document.write ("<BR>"); document.write(s.match(/bti/gi));//Kết quả: ti,Ti vì 2 chữ này nằm ở vị trí đầu của 2 từ ti, Ti trong chuỗi s document.write ("<BR>"); document.write(s.match(/Bai/gi));//Kết quả: ai, vì chữ này nằm ở phía cuối của chữ hai trong chuỗi s document.write ("<BR>"); document.write(s.match(/th(?=u)/gi));//Kết quả: Th,th, vì 2 chữ này có theo sau (?=) là u, là 2 chữ Thu, thu trong chuỗi gốc. document.write ("<BR>"); document.write(s.match(/t(?!h)/gi));//Kết quả: t,t,T, vì 3 chữ này không theo sau (?!) bởi chữ h, tương ứng với t , ti, Ti trong chuỗi gốc. </script> </head> </html> Các lớp ký tự trong regex: [xyz]: Tìm một ký tự bất kỳ nằm trong tập ký tự giữa cặp dấu ngoặc vuông [x-z]: Tìm một ký tự bất kỳ nằm trong tập ký tự từ x đến z [^xyz]: Tìm một ký tự bất kỳ không thuộc tập ký tự giữa cặp dấu ngoặc vuông. .: Tìm bất kỳ một ký tự nào không phải là ký tự xuống dòng mới (new line) hoặc ký tự kết thúc dòng (line terminator). w: Tìm một ký tự dạng a-Z, 0-9 và dấu gạch dưới. W: Ngược lại với w d: Tìm một ký tự thuộc tập ký tự từ 0 đến 9 D: Ngược lại với d: Tìm một ký tự không nằm trong tập ký tự từ 0 đến 9 s: Tìm ký tự cách (dấu cách) S:Tìm một ký tự không phải là dấu cách Ví dụ: HTML Code: <html> <body> <script type="text/javascript"> var str = "1 voi 1 la 2, 2 them 2 la 4"; // trả về mảng chứa các ký tự trong đoạn từ e tới h document.write(str.match(/[e-h]/gi));//Kết quả: h,e, với h,e nằm trong chữ them. document.write ("<BR>"); // Trả về mảng các ký tự không thuộc tập các ký tự từ a-m và ký tự u: document.write(str.match(/[^a-mu ]/gi));//Kết quả: 1,v,o,1,2,,,2,t,2,4
  • 16. document.write ("<BR>"); // Tìm các chuỗi con bắt đầu bởi chữ oi, tiếp theo sau đó là 1 ký tự thuộc lớp W: document.write(str.match(/oiW/gi));//oi document.write ("<BR>"); // Tìm các ký tự là các chữ số: document.write(str.match(/d/gi));//1,1,2,2,2,4 document.write ("<BR>"); // Tìm các chuỗi bắt đầu bởi 1 ký tự thuộc lớp D, sau đó là 1 ký tự không thuộc nhóm từ b-t: document.write(str.match(/D[^b-t ]/g));//v, 1,la, 2, 2, 2,la, 4 document.write ("<BR>"); // Tìm các dấu cách: document.write(str.match(/s/g));//, , , , , , , , </script> </body> </html> Các phép lặp trong regex RegEx cho phép tìm kiếm lặp bên trong biểu thức: {x}: Lặp một ký tự hoặc một biểu thức con trước đó x lần {x,y}: Lặp một ký tự hoặc một biểu thức con trước đó từ x đến y lần {x,}: Lặp một ký tự hoặc một biểu thức con trước đó >= x lần ?: Lặp một ký tự hoặc một biểu thức con trước đó 0 hoặc 1 lần *: Lặp một ký tự hoặc một biểu thức con trước đó >=0 lần +: Lặp một ký tự hoặc một biểu thức con trước đó >=1 lần Ví dụ: HTML Code: <html> <body> <script type="text/javascript"> var str = "Ai mua xoi deeeeee"; // Tìm một chuỗi bao gồm các chữ cái d hoặc e (lớp [de], lặp lại 3 lần: document.write (str.match(/[de]{3}/g));//dee,eee // Tìm một chuỗi bao gồm các chữ cái d hoặc e, lặp lại >=3 lần: document.write (str.match(/[de]{3,}/g));//deeeeee // Tìm một chuỗi bao gồm các chữ cái d hoặc e, lặp lại từ 3 đến 5 lần: document.write (str.match(/[de]{3,5}/g))//deeee // Tim chu d, sau chu d la 0 hoac 1 chu e document.write (str.match(/de?/g)); // Tim chu d, sau chu d la 0 hoac n chu e document.write (str.match(/de*/g)); // Tim chu d, sau chu d la 1 hoac n chu e document.write (str.match(/de+/g)); //Tim tat ca cac tu bao gom cac chu cai tu a den z
  • 17. document.write (str.match(/[a-z]*/gi)); //Tim tat ca cac tu bao gom cac chu cai tu a den z, sau tu la mot dau cach: document.write (str.match(/[a-z]* +/gi)); </script> </body> </html> Gộp nhóm các biểu thức Chúng ta có thể sử dụng các dấu ngoặc tròn () để gộp nhóm như trong các biểu thức toán học thông thường. (): Tìm kiếm một nhóm các ký tự bên trong cặp dấu ngoặc và lưu vào chuỗi kết quả. (?: ): Tìm kiếm chuỗi kết quả không chứa tập ký tự nằm trong cặp dấu ngoặc. |: Phép toán hoặc, được sử dụng để kết hợp các mệnh đề với nhau vào chung một biểu thức Ví dụ: HTML Code: <html> <body> <script type="text/javascript"> var str = "Email: mail@ttt.com, test@ttt.com.vn, sinhln@hnue.edu.vn"; // Tim tat ca cac dia chi email trong chuoi document.write (str.match(/([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA- Z0-9]{2,4})+/gi)); //Tim tat ca cac so trong chuoi str=" 12312 and 343 and 54q"; document.write (str.match(/[0-9]+/g)); // hoac document.write(str.match(/d+/g)); </script> </body> </html> Phần 2: Một số trường hợp ứng dụng Qua phần đó, các bạn hẳn đã hiểu được regex là cái gì, và bước đầu có thể đọc hiểu được ý nghĩa của một chuỗi regex. Bài này đi vào tìm hiểu một số ví dụ ứng dụng regex để xử lý các bài toán trong thực tiễn. I. Tìm kiếm và thay thế Hẳn các bạn đã biết, phương thức replace() trong Javascript nếu ở chế độ bình thường thì nó sẽ chỉ tìm và thay thế được duy nhất chuỗi đầu tiên được tìm thấy. VD:
  • 18. Code: <script language="javascript"> var str="chuoi 1, chuoi 2, chuoi 3"; document.write (str.replace ("chuoi","cam")); // Ket qua: cam 1, chuoi 2, chuoi 3 </script> Vậy làm thế nào để thay thế được tất cả các từ "chuoi" thành "cam"? Ở đây, chúng ta có thể sử dụng các phép tìm kiếm lặp của regex: HTML Code: <script language="javascript"> var str="chuoi 1, chuoi 2, chuoi 3"; // Chuỗi cần tìm là 1 regex: /chuoi/gi, xác định tìm kiếm từ chuoi lặp lại cho đến cuối chuỗi gốc và không phân biệt hoa thường document.write (str.replace (/chuoi/gi,"cam")); // Ket qua: cam 1, cam 2, cam 3 </script> II. Hỗ trợ kiểm tra dữ liệu theo mẫu regex Ở đây các bạn cần làm quen với một phương thức trong lớp RegExp của javascript, đó là phương thức test(). Cú pháp: biến_regex.test(chuỗi_gốc) Phương thức này trả về true nếu như chuỗi gốc khớp với giá trị trả về của biến_regex. Ngược lại là false. Ví dụ: HTML Code: <script language="javascript"> // Khai báo 1 chuỗi thông thường var str="Hello world!"; //Khai báo 1 chuỗi mẫu (biểu thức regex) var patt=/Hello/g; var result=patt.test(str); document.write("Ket qua: " + result); // Tra ve true vi tim thay tu Hello trong chuoi str //Một mẫu chuỗi khác patt=/phpvn/g; result=patt.test(str); document.write("<br />Ket qua: " + result); // Tra ve false vi khong thay chuoi phpvn trong chuoi str.
  • 19. </script> a. Kiểm tra xem chuỗi nhập vào có phải là 1 số hay không? Bình thường, chúng ta có thể sử dụng các hàm kết hợp như: isNaN, parseInt, parseFloat… để kiểm tra xem đó có phải là một số hay không? Ở đây tôi cung cấp một cách khác dùng regex: Đoạn mã dưới đây sẽ chỉ kiểm tra xem đây có phải là 1 số nguyên dương hay không: HTML Code: <script language="javascript"> function phpvn_isDigit(myString) { var reg = /^d+$/; return (reg.test(myString)); } document.write (phpvn_isDigit("12345")); </script> Đoạn mã dưới đây sẽ kiểm tra xem có phải là đầu vào là 1 số nguyên hay ko (có thể có thêm dấu +/- ở trước): HTML Code: function phpvn_isInt(myString) { var reg= /^(+|-)?d+$/; return (reg.test(fData)); } Tiếp tục nâng cấp kiểm tra xem chuỗi đầu vào có phải là một số thực hay không. Một chuỗi được coi là 1 số thực nếu như nó bắt đầu bởi 1 chuỗi số, có 1 dấu chấm ở giữa và kết thúc bởi 1 chuỗi số: HTML Code: function phpvn_isFloat(myString) { var reg= /^(+|-)?((d+(.d+)?)|([0].d+))$/; return (reg.test(myString)); } Nhưng mẫu chuỗi trên sẽ trả về false nếu người dùng gõ 1 chuỗi dạng 123,123,123.45
  • 20. Nguồn: phpvn.org Tags: Xửlý chuỗi bằng Javascript - Regular Expression No Response to “Xử lý chuỗi bằng Javascript – Regular Expression” Comments are closed.
  • 21. Sửdụng Regular Expression trong Javascript Bắt đầu từ phiên bản Javascript 1.2 thì Regular Expression đã được tích hợp sẵn. Do đó từ trình duyệt Internet Explorer 4.0 trở về sau, Netcapse 4.0 trở về sau, tất cả các phiên bản của Mozilla Firefox, các trình duyệt phổ biến hiện nay như Chrome, Opera, Safari... đều sử dụng Javascript>= 1.2 do đó ta đều có thể sử dụng Regular Expression trên các trình duyệt vừa nêu. Khi có nhu cầu kiểm tra tính hợp lệ của dữ liệu, tìm kiếm hoặc thay thế các dữ liệu theo một nguyên tắc nào đó thì sử dụng Regular Expression sẽ giúp ta tiết kiệm được rất nhiều thời gian. ECMA là viết tắt của tổ chức: "European Computer Manufacturers Association" được thành lập vào năm 1959. Truy cập ecma-internation.org để biết thêm thông tin. Nói thêm về quá trình đưa Regular Expression vào Javascript. Bắt đầu từ phiên bản ECMA- 262 thì Regular Expression được công nhận là một thành phần chuẩn trong ngôn ngữ. Do đó các ngôn ngữ lập trình phát triển trên yêu cầuđặc tả của bản ECMA-262 thì đều hổ trợ Regular Expression. Phiên bản Javascript 1.2 là phiên bản phát triển dựa trên bản đặc tả ECMA-262 do đó hổ trợ sẵn Regular Expression. Ngoài Javascript còn có rất nhiều ngôn ngữ khác phát triển trên yêu cầuđặc tả của ECMA-262 mà phổ biến nhất hiện nay là Action Script. Phiên bản Action Script 3.0 hổ trợ đầy đủ đặc tả ECMA-262 do đó từ bản này chúng ta có thể sử dụng Regular Expression hoàn toàn như trên Javascript. Cách đị nh nghĩa Regular Expression trên Javascript Sử dụng Javascript ta có thể viết theo cách như sau: /pattern/modifiers với pattern là mẫu mà ta cần sử dụng, modifiers là các tham số tùy chọn thêm. Lưu ý là pattern là chuỗi bắt buộc còn modifiers là tùy chọn. Cú pháp này dựa trên cú pháp của ngôn ngữ Perl. Dưới đây là một số từ khóa modifers mà Javascript hổ trợ: /g bật chế độ tìm kiếm toàn cục ("global" match). Khi ta sửdụng các hàm nhưreplace() thì ta dùng tham số này để thay thế hết tất cả các chuổi khớp với điều kiện, ngược lại không sửdụng thì chỉ thay thế cho chuổi đầu tiên khớp với điều kiện. (Nếu bạn đã sửdụng PHP thì khi có tham số /g trong Javascript tương ứng với bên PHP là hàm preg_match_all() còn không có tham số này thì tương ứng là hàm preg_match /i bật chế độ tìm kiếm phân biệt hoa thường. /m bật chế độ tìm kiếm trên nhiều dòng. Mặc đị nh Javascript chỉ tìm kiếm trên một dòng dù dữ liệu ta sửdụng là nhiều dòng. Chúng ta có thể viết gọn các tham số này. Thay vì /i/g/m ta có thể sử dụng /igm. Một số lưu ý khi khai báo Regular Expression: Không sửdụng A và Z để tìm ký tựđầu dòng và kết thúc dòng nhưPerl, chúng ta sửdụng ^ và $ để thay thế Chưa hổ trợtìm kiếm ngược đầy đủ, sẽ có bài nói kỹ hơn về vấn đề này. Hổ trợđầy đủ tìm kiếm thuận Không hổ trợUnicode, trừtrường hợp ta tìm chính xác từng ký tựtheo mã ví dụ nhưuFFFF
  • 22. Không hổ trợđiều kiện trong chuỗi "pattern" Không hổ trợchú thích trong chuỗi "pattern". Để chú thích cho đoạn mẫu của chúng ta hãy sử dụng // ởbên ngoài. Chú thích thêm: Khi khai báo bằng cách này thực chất là chúng ta sử dụng cách viết tắt của Javascript. Cách viết này là thay thể cho cụm từ new RegExp() trong Javascript. Ví dụ về việc dùng đầy đủ như sau: var test = /pattern/ tương đương với var test = new RegExp("pattern") var test = /pattern/modifiers tương đương với var test = new RegExp("pattern", "modifiers") Một số hàm xử lý chuỗi sử dụng Regular Expression Cách đơn giản nhất là ta sử dụng hàm match() để kiểm tra. Ví dụ: if (myString.match(/regex/)) { /** Tìm thấy chuổi cần tìm **/ } Để tìm và thay thế chuổi, ta sử dụng hàm replace() theo cú pháp: myString.replace(/replaceme/g, "replacement"); Chú ý lúc sử dụng hàm này ta nên sử dụng tham số /g để tìm và thay thế đầy đủ hết, tham số thứ 2 của hàm là một chuổi bình thường ta cần thay thế. Để sử dụng lại chính chuỗi ta tìm thấy để sử dụng lại trong lúc thay thế, ta sử dụng các ký tự từ $1 đến $9 để làm, với các con số chính là vị trí được tìm thấy của một cụm từ tương ứng với "pattern" mà ta đã nhập vào theo các điều kiện. Cuối cùng, hàm split() cũng hổ trợ Regular Expression. Ví dụ: var myArray = myString.split(/,/); Các hàm trong đối tượng Regular Expression Khi khai báo một chuổi Regular Expression (Đa số chúng ta dùng cách rút gọn) thì chúng ta đã tạo ra một đối tượng RegExp, với các hàm được định nghĩa như sau: test() Hàm này sẽ kiểm tra tham số truyền vào có trùng với chuỗi "pattern" mà ta đã định nghĩa hay không. Hàm trả về giá trị true nếu chuỗi nhập vào có mẫu ta cần tìm và false nếu tìm không thấy. exec() Hàm này trả về một mảng chứa các đoạn trùng khớp với "pattern" chúng ta định nghĩa và trả về null nếu không tìm thấy. Chúng ta còn có thể sử dụng rút gọn mà không cần khai báo chuổi Regular Expression. Ví dụ: /d/.test(subject) là cách viết nhanh để kiểm tra xem trong chuỗi subject ta nhập vào có con số nào không.
  • 23. Regular Expressions trong PHP [PHP] 1. Giới thiệu Regular Expression là gì? + Biểu thức chính quy. + Hiểu nôm na là 1 chuỗi có quy tắc để mô tả những chuỗi(string) khác. Làm việc với string thường rất vất vả và đòi hỏi độ chính xác cao. với Regular Expression trong PHP, công việc này được đơn giản đi rất nhiều. 1 dòng code trong PHP làm việc với string trong trường hợp này có thể sánh với hàng trang code trong các ngôn ngữkhác. Ta có thể ứng dụng những đoạn code đơn giản ởtrên vào các form đòi hỏi nhập dữliệu, thông tin người dùng, ... hay dùng để lọc các biến được truyền. 2. Hàm preg_match trong PHP Trong PHP có một hàm là preg_mathch(string pattern, string subject). Hàm này trả về 1 nếu đúng quy tắc so mẫu, trả về 0 nếu sai quy tắc so mẫu. Với: string pattern: là biểu thức dùng để so mẫu. Các chuỗi được so mẫu phải tuân thủ quy tắc của biểu thức này. string subject: là chuỗi được so mẫu. Một pattern (biểu thức so mẫu) có dạng: $pattern = "/ thiết_lập quy_tắc_ởđây /"; Biểu thức so mẫu nằm giữa hai dấu "/", và hai dấu "/" này nằm trong cặp nháy đôi. Để viết regular expression ta cần làm quen với những ký tựcó { nghĩa đặc biệt trong một regular expression đó là các Meta symbols Meta Symbols Ý nghĩa ^ Bắt đầu dòng (string) $ Kết thúc dòng (string)
  • 24. . Đại diện cho một ký tựbất kz + Lặp lại ký tựhay cụm ký tựđứng trước nó (>=1) Ví dụ: a+ : nghĩa là lặp lại chữa và phải có ít nhất là một chữa. Do vậy mới ghi >=1 cho dễ hiểu. - 123a: 1(đúng) - 123aa: 1(đúng) - 123 : 0(sai). vì không có chữa nào được lặp. * Cũng là lặp lại ký tựhay cụm ký tựđứng trước nó (>=0) Ví dụ: a* : nghĩa là lặp lại chữa, nếu không có chữa cũng không sao. Do vậy mà >=0 -123a: (1) -123aaa: (1) -123: (1). Không có chữa cũng không sao. ? Tồn tại hay không tồn tại ký tựhay cụm ký tựđứng trước nó Dấu đi kèm với 1 meta symbol sẽ làm mất { nghĩa của meta symbol đó - trả về symbol bình thường. Ví dụ: $patern = "/.../"; (trong dấu...ta thay các biểu thức sau) ^a : Bắt đầu của dòng là ký tựa. Dòng này có thể là abcd, aaaa, a4684,.... miến sao bắt đầu bằng ký tựa. ^string$ : Dòng này mang giá trị cứng là string vì nó bị chặn giữa ^ và $. Nghĩa là chỉ có chữstring mới đúng, còn lại thì sai hết. Từbây giờthì ta sẽ sửdụng: $pattern = "/^...$/"; ^ :bắt đầu một dòng, $ :kết thúc một dòng a. :có thể mang giá trị : ab, a1, au, af .Nhưng không thể là abc, ab1, vì dấu . chi đại diện cho một ký tự! ax+ :biểu diễn cho dòng: ax, axx, axxxx - nhưng không thể là "a" vì + đại diện cho >=1 ký tự. ay* :biểu diễn cho dòng: a, ay, ayy, ayyyyyyyyy,.... ab? :biểu diễn cho: a, ab (b có thể có hoặc không)
  • 25. a+b :biểu diễn cho dòng: "a+b" Cách biểu diễn sốvà chữcái d : Biểu diễn một con sốbất kz. Ví dụ: $reg5="/^d$/"; // chi co 1 chu so $reg5a="/^dd$/"; // chi co 2 chu so $reg5b = "/^10Adddddd$/"; // 10A123456 D : Ký tựbất kz không phải là chữsố(ngược với d) Ví dụ: $reg = "/^D$/"; // bieu dien mot ky tu bat kỳ khong phai la so $reg ="/^dDdD$/"; bieu dien mọt chuoi co dang 1a2b. Với a,b là ký tự bất kỳ khong phai la so w - Ký tựtừa-z, A-Z, hoặc 0-9 Ví dụ: $reg6 = "/^www$/"; // chi gom 3 ky tu từ a->z, A->Z, 0->9. Khong co ky tu dac biet $reg7 ="/^w+@w+.w+$/"; // kiem tra email teo@yahoo.com 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) Nghĩa là chỉ chứa các ký tựđặc biệt Ví dụ: $reg = "/^W$/"; // chua mọt ký tu khong thuoc tù a-z , A-Z, 0-9
  • 26. s+ - Có nghĩa: có >=1 khoảng trắng. Ví dụ: $reg ="/^w+sd+$/"; // bieu dien a 1, g 22, abc 123 Ý nghĩa các dấu ngoặc tròn, ngoặc nhọn, ngoặc vuông Ngoặc tròn: () : dùng để gom các ký tựthành một nhóm Ví dụ: $reg = "/^d(ab)+$/"; bieu dien 1ab, 1abab, 1ababab. Lặp lại ab vô hạn Ngoặc nhọn {}: dùng để lặp ký tựhay cụm ký tựđứng trước nó với sốlượng xác đị nh + {3}: lặp lại chỉ 3 lần. + {3,}: lặp lại >=3. + {3,10}: lặp lại từ3 đến 10 lần. Ví dụ: $reg8 = "/^d{3}$/"; // lap chi 3 so $reg8a = "/^d{3,}$/"; // lap >=3 $reg9 = "/^a(xy){2,}$/"; // lap xy toi thieu tu 2 lan tro len $reg9a = "/^a(xy|12){2,}$/"; // lap xy hoac 12 toi thieu 2 lan tro len Dấu gạch thẳng đứng để lựa chọn hoặc cái này hoặc cái kia Ví dụ: $reg16 = "/^[a-zA-Z0-9]+.(jpg|png|gif|jpeg|JPG|PNG|GIF|JPEG)$/"; // kiem tra file hinh co duoi khac nhau Dấu ngoặc vuông để chỉ đoạn ký tựcho phép + [a-z] : chỉ các chữtừa đến z + [A-Z] : chỉ các chữtừA đến Z
  • 27. + [0-9] : chỉ các sốtừ0-9 + [a-zA-z0-9] : các chữtừa-z, A-Z, 0-9 Ví dụ: $reg13 = "/^[3-7]$/"; // chi co 1 so trong khoang tu 3 den 7 3. Hàm preg_replace trong PHP Hàm này dùng để tìm một string theo quy tắc và thay thế string đó theo mình muốn. Cú pháp: preg_replace(mixed regex, mixed replace, mixed subject); mixed regex: biểu thức so mẫu mixed replace: mẫu thay thế. mixed: chuỗi mẹ Ví dụ: preg_replace("/(d{3})/","<u>$1</u>","abc 123 efg"); Tìm chuỗi 123 và gạch dưới nó. Kết quả abc 123 efg Chú ý: - Cứ1 nhóm trong dấu ngoặc tròn được đại diện bằng các biến $ là được đánh dấu lần lượt từtrái sang phải, bắt đầu là $1, tiếp theo là $2 , $3... - Nếu thay thế nó bằng một cái khác thì không có $1, $2, $3...Còn nếu chỉ thay đổi nó thì dùng $1, $2, $3.. nhưví dụởtrên. Ví dụ preg_replace("/^<div(s+)(id='teo')?>(s+)?(.*)(s+)?</div>$/","<b><u >$4</u></b>","<div id='teo'> Nguyen Van Teo </div>"); Tìm <div id='teo'> Nguyen Van Teo </div> và thay đổi nó thành <b><u>Nguyen Van Teo</u></b> Lưu ý:
  • 28. Biểu thức so mẫu viết liền, không khoảng trắng. Nếu chuỗi mẹ có khoảng trắng thì mình thêm vào biểu thức so mẫu là (s+). Khi đó nhớđếm cụm dấu ngoặc để xác đị nh biến $ cho chính xác. 4. Hàm preg_split trong PHP Hàm này có tác dụng cắt chuỗi giống nhưhàm explore, nhưng hàm explore phải kiếm đúng theo k{ tự, còn hàm này kiếm theo quy tắc Cú pháp: preg_split(string pattern, string subject); string pattern: biểu thức so mẫu string subject: chuỗi mẹ Chú ý:hàm này trả về một mảng Ví dụ: $macth = preg_split("/#/","abc#123#efg"); print_r($macth);