P H P  V I E T  N A M  P O R T A L
Xin chào, Khách. Vui lòng đăng nhập hoặc đăng ký tài khoản.
Bạn đã quên email kích hoạt?






     Trang chủ | Download | Tự học PHP | Kho tư liệu | Diễn đàn
Trang: [1]
  In  
This topic has not yet been rated!
You have not rated this topic. Select a rating:
Tác giảChủ đề: Xử lý mẫu chuỗi (RegEx) trong JavaScript - Phần 2: Một số trường hợp ứng dụng  (Đã đọc 928 lần)
cmxq
Administrator
PHP Intermediate
*****
Posts: 1288


Xem hồ sơ Email
« on: February 04, 2010, 01:12:22 AM »

Trước khi xem bài này, tốt nhất là các bạn nên ngâm cứu kỹ phần I

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

Logged

Trở về phpvn.org
http://trangtin.net: CMXQ tập làm "tin tặc"
cmxq
Administrator
PHP Intermediate
*****
Posts: 1288


Xem hồ sơ Email
« Trả lời #1 on: February 04, 2010, 01:33:29 AM »

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

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>
(Còn tiếp)

« Last Edit: February 04, 2010, 01:36:10 AM bởi cmxq » Logged

Trở về phpvn.org
http://trangtin.net: CMXQ tập làm "tin tặc"
cmxq
Administrator
PHP Intermediate
*****
Posts: 1288


Xem hồ sơ Email
« Trả lời #2 on: February 06, 2010, 03:22:07 AM »

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:

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

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

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
Phần này sẽ dành cho các bạn, khi nào các bạn xử lý được thì tôi sẽ tiếp tục loạt bài viết này  Tongue
« Last Edit: February 06, 2010, 04:04:36 AM bởi cmxq » Logged

Trở về phpvn.org
http://trangtin.net: CMXQ tập làm "tin tặc"
Trang: [1]
  In  
 
Chuyển sang:  

Powered by SMF 1.1.11 | SMF © 2006-2007, Simple Machines LLC . Modified by PHPVN Members