Capitalize

[ 15.8.2007 ]


Hehe, hôm nay khá là thú vị, lên trường coi thông báo đầu tiên của năm học mới. Không nhiều ngạc nhiên, vẫn phòng đó, vẫn thầy đó chủ nhiệm. Chỉ có một thứ làm mình hơi bất ngờ. Đó là lớp mình có thêm 2 người mới (cứ bao nhiêu người đi thì bấy nhiêu người đến, 3 năm vẫn thế). Hai bạn này từ chuyên Lý chuyển sang, một quen, một lạ. Quen thì chính là cái cậu Khôi, bạn thằng Khải và Nguyện. Còn người lạ, thì chính là... người lạ :)), chỉ biết tên bạn này là Misa.

Cái làm mình vui hơn là giờ học Aptech. Từ giờ 1 ngày tới 4 tiếng thực hành lận, đã hơn trước nhiều. Hôm nay thầy cho mọi người xem mấy bài Play with String hôm bữa. Hà hà, thầy lấy bài của mình ra làm bài giải tiêu biểu :)>-. Vì mình viết cực kỳ ngắn gọn (tuy hơi phức tạp tí). Đó là nhờ công sức bao ngày nghiên cứu Regular Expression của mình (ai thích tìm hiểu thì vào trang này nhé) ;)).

Từ khúc này trở đi hơi bị nhảm, tại mình quá khích, nên viết ra thôi, khỏi đọc cũng đc. Trong bài có 1 câu mà mình thích nhất, chỉ cần 1 dòng lệnh là xong. Nếu dùng cách thường (duyệt chuỗi) thì sẽ rất dài 8-}.

Capitalize

Cái này yêu cầu viết hoa ký tự đầu tiên của mỗi từ. Cơ bản thì Jscript không có method là .toProperCase(), nhưng nếu dùng regular expression thì dễ dàng tạo ra hàm tương tự.

1  function proper(str) {
2  str = " "+str
3  str = str.toLowerCase()
4  re = /\s(\S)/g
5  str = str.replace(re, function($1) {return $1.toUpperCase() })
6  str = str.substr(1)
7  return str
8 }

Giải thích:
1. Khai báo hàm proper, tham số là str
2. Tạo thêm 1 khoảng trắng nằm trước chuỗi cần Capitalize
3. Chuyển str về chữ thường hết
4. Khai báo 1 regular expression tên là re gồm 1 cặp khoảng trắng (\s) và không phải khoảng trắng (\S). Riêng \S được đặt trong cặp ngoặc có ý nghĩa lưu lại giá trị của chữ cái đầu tiên sau khoảng trắng vào biến ảo $1.
5. Dùng method replace để thay thế re thành cái hàm phía sau. Hàm này dùng để chuyển ký tự đã lưu ($1) thành viết hoa.
6. Bỏ đi 1 ký tự đầu tiên, chính là khoảng trắng đã thêm vào ở đầu.
7. Trả giá trị str vừa đổi về cho hàm.

Chúng ta có thể rút gọn hàm này tới tối đa như sau:

function proper(str) {
return (" "+str).toLowerCase().replace( /\s(\S)/g,function($1){return $1.toUpperCase() }).substr(1)
}

Và thế là xong, đã giải quyết đc bài toán chỉ trong 1 câu lệnh.

Thôi, ba hoa đủ rồi, bữa khác rảnh nói tiếp hen.

9 comments:

  1. Dis!!!!x-(
    hổng biết comment sao luôn!!!!
    toàn là Aptech!!!
    mày chơi tao hả mạy!!!!
    Má chúng ta!!!! =))
    mày điếm hơn rồi đó Tài em à!!!!

    ReplyDelete
  2. haha, tao chơi mày thôi
    lấy pageview ấy mà :))

    cũng tại tao quá khích wá thôi :">

    ReplyDelete
  3. chóng mặt hoa mắt nhức đầu @-)...kúi kùng hem hĩu j hít...he'he'..vô comment choa xôm kái..;))

    ReplyDelete
  4. hehe, tại lúc đó đầu óc thiếu minh mẫn, ngồi viết lảm nhảm

    ReplyDelete
  5. dzời :-w ông kiu tui vô coi 1 nùi mã hả :-w tui có hểu gì đâu hổng bít à :(( suốt ngày bị ông dụ ko là sao :((

    ReplyDelete
  6. hehe, tui có dụ bà đâu, tại lâu bà ko vào, còn nhiều bài mà, còn nhiều bất ngờ chờ đón bà tại Gman's blog ;))

    ReplyDelete
  7. hoho, nhung cai gi co lien quan den Tin hoc la Minh mu, ko biet gi het +_+
    Comment dzay thoi ha! :D

    ReplyDelete
  8. hehe, cái này viết nhảm ấy mà

    ReplyDelete

You can use some HTML tags, such as <b>, <i>, <a>