JavaScript - RegExp kiểm tra string có phải là percentage
TIL
608
@100daysTIL
72
White

Minh-Trung Nguyễn viết ngày 27/02/2018

JavaScript - RegExp kiểm tra string có phải là percentage

Day 27

Bài toán: Kiểm tra xem input nhập vào có phải là dạng "percentage" hay không? input này là khách hàng tự nhập toàn bộ vào 1 file JSON, không phải ở submit form.

Kết quả: Tìm được 1 regular expression để kiểm tra ở bài này trên StackOverflow.

if (/^\d+(\.\d+)?%$/.test(string_cần_test)) {
    // pass
} else {
    // fail
}

trong đó:

  • .test() là một method của RegExp, nhận vào 1 string, trả về true nếu string kia chứa kết quả trùng với regular expression.
  • Regular Expression:
    • được bọc trong 2 gạch chéo / /(ngoài cùng và cuối cùng)
    • ký tự ^ ứng với đầu chuỗi
    • ký tự \d trùng với các chữ số từ 0 đến 9
    • ký tự + ứng với số lần xuất hiện (bằng 1 trở lên) của item đứng ngay trước nó, trong trường hợp này là \d.
    • ký tự $ ứng với "cuối của string".
    • ký tự ? ứng với số lần xuất hiện (bằng 0, hoặc từ 1 trở lên) của item đứng ngay trước nó. Item đứng ngay trước nó trong trường hợp này là toàn bộ cụm (\.\d+)
    • Cụm (\.\d+) được bao bởi ngoặc kép ( ), báo hiệu là phải xử lý nó như là 1 cụm không tách rời các phần tử bên trong:
    • ký tự \. ứng với dấu chấm thập phân "."

Nhìn vào sơ đồ có thể thuyết minh rằng, regular expression trên sẽ kiểm tra xem string có:

alt text

  • bắt đầu bằng một hoặc nhiều chữ số hay không
  • nối tiếp bằng một dấu chấm, và một hoặc nhiều chữ số hay không. Toàn bộ cụm này có thể có hoặc không.
  • sau đó có kết thúc bằng ký tự % hay không

Ghi chú: Sơ đồ trên có 1 điểm sai khi nói số Digit trong Group #1 là "1 or more times". Đúng ra phải là "0 or more times".

Nếu đúng, trả về true, sai trả về false.

Thử test RegExp này xem sau:

// khai báo hàm isPercentage
const isPercentage = string => {
    return /^\d+(\.\d+)?%$/.test(string);
    };
// kiểm tra một vài trường hợp
isPercentage("50%")
// output: true
isPercentage(".50%")
// output: false
isPercentage("0.50%")
// output: true
isPercentage("5.%")
// output: false
isPercentage("5aa.99%")
// output: false
isPercentage("5.99aa%")
// output: false
isPercentage("5.55")
// output: false

Vậy là RegExp trên không kiểm tra được với các trường hợp như ".50%""5.%".

Kết luận

Tạm chấp nhận RegExp trên. Nếu muốn chặt chẽ hơn, tìm hiểu thêm tại:
http://regexlib.com/Search.aspx?k=percent

ngminhtrung 22-02-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Minh-Trung Nguyễn

58 bài viết.
74 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
44 15
Đăng lại một bài đã viết từ cách đây mấy tháng. Chủ đề này đã có không ít, nhưng chẳng hiểu sao lượng bài tự viết của dân lập trình người Việt ta v...
Minh-Trung Nguyễn viết 4 tháng trước
44 15
White
27 5
Ghi chú: Tiêu đề hoàn toàn mang tính câu view. Bài copy từ blog của tác giả :) Tại sao lại có bài viết này? Một ngày đẹp giời tôi cần kiểm t...
Minh-Trung Nguyễn viết 8 tháng trước
27 5
White
16 4
Về bước tìm và xử lý dữ liệu của Việt Nam phục vụ Data Visualization nền web Làm việc với D3js được nửa năm, một trong những điều bận lòng là chưa...
Minh-Trung Nguyễn viết 3 tháng trước
16 4
Bài viết liên quan
White
0 2
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 2 tháng trước
0 2
White
2 1
Javascript inititalValue trong reduce() có quan trọng không? Day 41: Đọc code mẫu về hàm reduce() trong (Link), thấy hàm reduce() khá "đơn giản"....
Minh-Trung Nguyễn viết 4 tháng trước
2 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
58 bài viết.
74 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!