Công Cụ Này Là Gì?
Công cụ kiểm tra dấu ngoặc quét văn bản theo từng ký tự, theo dõi mỗi dấu ngoặc mở ( [ { trên một ngăn xếp và ghép nó với dấu ngoặc đóng ) ] } tiếp theo mà nó gặp. Nếu một dấu ngoặc đóng không khớp với dấu ngoặc mở gần nhất còn chưa đóng, hoặc một dấu ngoặc mở không bao giờ được đóng, hoặc một dấu ngoặc đóng xuất hiện mà không còn gì để đóng, lỗi đó sẽ được đánh dấu kèm vị trí chính xác.
Đây là một phép quét văn bản đơn giản, không phải trình phân tích cú pháp ngôn ngữ đầy đủ — nó hoạt động giống nhau bất kể nội dung dán vào là JavaScript, Python, JSON hay chỉ là văn bản thường, điều này khiến nó hữu ích với mọi ngôn ngữ hoặc định dạng có sử dụng dấu ngoặc.
Tại Sao Nên Dùng?
- Linter báo "Unexpected end of input" mà không kèm số dòng, và cuộn qua tệp 400 dòng chỉ để tìm một dấu ngoặc nhọn bị thiếu là lãng phí mười phút — dán vào đây và số dòng, cột chính xác hiện ra ngay lập tức.
- Bạn đang tự tay viết một file cấu hình JSON lúc 11 giờ đêm và ứng dụng lặng lẽ từ chối tải nó lên — chạy qua công cụ kiểm tra này trước khi bắt đầu nghi ngờ từng giá trị trong tệp.
- Một biểu thức regex hay toán học có sáu tầng ngoặc lồng nhau và bạn đã mất dấu xem cái nào chưa đóng — công cụ theo dõi ngăn xếp giúp bạn khỏi phải đếm bằng mắt.
- Bạn dán một đoạn mã từ một cuộc trò chuyện hay bài viết diễn đàn vào và nó không biên dịch được — kiểm tra nhanh cho biết có dấu ngoặc nào bị rớt khi sao chép-dán trước khi bạn đào sâu thêm.
- Bạn đang xem lại diff của đồng nghiệp và cách thụt lề trông có gì đó không ổn — chạy đoạn thay đổi qua công cụ kiểm tra để xác nhận đó là lỗi ngoặc thật hay chỉ là một kiểu định dạng khác thường.
- Bạn cần kiểm tra một đoạn mã không phải JavaScript, Python hay JSON — vì đây là phép quét ký tự đơn giản, nó hoạt động y hệt trên CSS, LaTeX, hay bất kỳ văn bản nào dùng dấu ngoặc mà không cần cài linter riêng cho từng ngôn ngữ.
Cách Sử Dụng
- Dán mã hoặc văn bản của bạn vào ô nhập liệu.
- Nhấn Kiểm Tra Dấu Ngoặc.
- Xem danh sách các lỗi, mỗi lỗi kèm số dòng và cột, hoặc xem xác nhận rằng mọi thứ đều khớp.
Ví dụ
Đầu vào
function foo() {
return [1, 2, (3];
}Đầu ra
Sai loại dấu ngoặc: ] tại dòng 2, cột 18; Sai loại dấu ngoặc: } tại dòng 3, cột 1; Dấu ngoặc mở chưa đóng: { tại dòng 1, cột 17Dấu ] ở dòng 2 lẽ ra phải đóng dấu ( được mở ở cột 15, chứ không phải dấu [ trước đó — đây chính xác là kiểu lỗi (dấu ngoặc đóng sai loại) rất dễ bị bỏ sót bằng mắt thường trong một tệp dài.
Các trường hợp sử dụng phổ biến
- Gỡ lỗi "Unexpected token" hoặc "Unexpected end of input" trong JavaScript, JSON hoặc Python mà không cần đọc lại cẩn thận toàn bộ tệp.
- Kiểm tra một đoạn JSON viết tay để tìm dấu ngoặc nhọn thừa hoặc thiếu trước khi dán vào tệp cấu hình.
- Xác minh các dấu ngoặc lồng nhau trong một biểu thức toán học hoặc công thức dài.
- Phát hiện một dấu ngoặc bị sót lại do vô tình khi chỉnh sửa sao chép-dán trong lúc review code.
Các loại dấu ngoặc và điều kích hoạt từng lỗi
Công cụ chỉ theo dõi ba loại cặp. Biết nhãn lỗi nào tương ứng với loại sai nào giúp bạn hành động nhanh hơn khi đọc báo cáo.
| Cặp dấu ngoặc | Cách dùng phổ biến | Lỗi thường gặp |
|---|---|---|
| ( ) | Gọi hàm, gom nhóm biểu thức, công thức toán học | Dấu ngoặc mở chưa đóng khi thiếu dấu ) sau một danh sách tham số dài |
| [ ] | Mảng, đánh chỉ số danh sách, lớp ký tự trong regex | Sai loại dấu ngoặc khi dùng nhầm ] để đóng { hoặc ( |
| { } | Đối tượng, khối mã, thân hàm | Dấu ngoặc mở chưa đóng ở cuối tệp khi quên đóng } sau một khối lồng nhau |
Câu Hỏi Thường Gặp
Công cụ này có kiểm tra cả dấu ngoặc kép hay thẻ không, hay chỉ dấu ngoặc?
Chỉ ba cặp dấu ngoặc: ngoặc tròn ( ), ngoặc vuông [ ], và ngoặc nhọn { }. Dấu ngoặc kép và thẻ HTML/XML không được theo dõi.
Sự khác biệt giữa ba loại lỗi này là gì?
"Dấu ngoặc mở chưa đóng" nghĩa là một dấu ngoặc mở không bao giờ được đóng cho đến hết văn bản. "Dấu ngoặc đóng không khớp" nghĩa là một dấu ngoặc đóng xuất hiện mà không có dấu ngoặc mở tương ứng trước đó. "Sai loại dấu ngoặc" nghĩa là một dấu ngoặc đóng xuất hiện, nhưng sai loại so với dấu ngoặc được mở gần nhất — ví dụ đóng dấu [ bằng dấu ).
Công cụ có hiểu rằng dấu ngoặc bên trong chuỗi ký tự hoặc chú thích không nên được tính không?
Không — đây là phép quét ký tự đơn giản, không phải trình phân tích hiểu ngôn ngữ, nên nó không nhận biết được chuỗi ký tự hay chú thích. Một ký tự dấu ngoặc bên trong chuỗi có dấu ngoặc kép hoặc chú thích vẫn được tính. Để có kết quả hoàn toàn chính xác trên tệp mã nguồn thực, hãy loại bỏ chuỗi/chú thích trước, hoặc dùng tính năng khớp dấu ngoặc tích hợp, hiểu cú pháp trong trình soạn thảo của bạn.
Mã của tôi có được tải lên đâu không?
Không. Việc kiểm tra chạy dưới dạng JavaScript cục bộ ngay trong trình duyệt của bạn; không có gì được gửi đến máy chủ.
Công cụ có xử lý đúng dấu ngoặc lồng sâu, kiểu ((([{...}])))?
Có — công cụ dùng một ngăn xếp theo dõi dấu ngoặc theo thứ tự mở, nên khớp đúng dù lồng sâu đến đâu. Không có giới hạn độ sâu nhân tạo; giới hạn thực tế duy nhất là bộ nhớ trình duyệt của bạn.
Điều gì xảy ra nếu tôi dán văn bản hoàn toàn không có dấu ngoặc?
Công cụ báo mọi thứ đều khớp, vì không có dấu ngoặc mở hay đóng nào để đánh dấu là lỗi — kết quả rỗng nghĩa là không tìm thấy vấn đề, chứ không phải kiểm tra bị lỗi.
Công cụ có cho tôi biết tôi có quá nhiều dấu ngoặc đóng so với dấu ngoặc mở không?
Có, một cách gián tiếp: dấu ngoặc đóng dư thừa không còn gì để khớp được báo là "dấu ngoặc đóng không khớp", còn dấu ngoặc được mở nhưng không bao giờ đóng đến hết văn bản được báo là "dấu ngoặc mở chưa đóng" — nên bạn biết vấn đề nằm ở phía nào.
Công cụ có hoạt động trên mã đã minify, nơi mọi thứ nằm trên một dòng không?
Có — phép quét hoạt động từng ký tự bất kể xuống dòng, dù trong trường hợp đó số cột báo ra hữu ích hơn số dòng vì mã minify thường là một dòng rất dài.
Đây có phải là thứ thay thế cho tính năng khớp dấu ngoặc trong trình soạn thảo mã của tôi không?
Không hẳn — tính năng khớp dấu ngoặc trong trình soạn thảo thường hiểu ngôn ngữ và làm nổi bật cặp ngoặc khi bạn gõ, còn công cụ này là một lần quét bạn chạy trên văn bản đã dán, hữu ích khi bạn không mở sẵn tệp trong trình soạn thảo hoặc muốn một báo cáo văn bản thuần về mọi lỗi cùng lúc.