Công cụ Loại Bỏ Khoảng Trắng & Làm Sạch Văn Bản
Làm sạch văn bản lộn xộn bằng cách loại bỏ khoảng trắng dư thừa, tab và dòng trống.
Cách sử dụng
- Dán văn bản của bạn vào ô nhập.
- Chọn các tùy chọn làm sạch mong muốn (tất cả được chọn theo mặc định).
- Nhấp Làm sạch văn bản để xử lý.
- Sao chép hoặc tải xuống kết quả đã làm sạch.
Câu hỏi thường gặp
Cái gì được tính là khoảng trắng?
Khoảng trắng, tab, khoảng trắng không ngắt và các ký tự khoảng trắng Unicode khác. Dấu xuống dòng được xử lý riêng qua các tùy chọn « dòng trống » và « thu gọn dấu xuống dòng ».
Công cụ này có sửa đổi nội dung của tôi không?
Không. Nó chỉ loại bỏ hoặc thu gọn các ký tự khoảng trắng. Từ ngữ, dấu câu và nội dung khác của bạn vẫn còn nguyên.
Tôi có thể sử dụng nó cho mã không?
Bạn có thể, nhưng cẩn thận · loại bỏ khoảng trắng đầu sẽ phá hủy thụt lề mã. Sử dụng các ô tích riêng lẻ để kiểm soát chính xác những gì được làm sạch.
Ý nghĩa thực sự của «whitespace»
Ký tự whitespace là ký tự tạo ra khoảng trắng khi văn bản được kết xuất, thay vì ký tự hiển thị, dùng để phân tách từ, thụt lề dòng và ngắt đoạn văn. Unicode Character Database gán thuộc tính White_Space chính thức cho đúng 25 code point. Các đối tượng quen thuộc (space, tab, line feed, carriage return) bao gồm hầu hết những gì bạn sẽ dán, nhưng danh sách đầy đủ còn bao gồm no-break space (U+00A0), narrow no-break space (U+202F), 11 typographic space trong khoảng U+2000-U+200A, line và paragraph separator (U+2028, U+2029), medium mathematical space (U+205F), và full-width ideographic space (U+3000) dùng sau dấu câu CJK.
Một nhóm riêng biệt trông vô hình nhưng không được Unicode phân loại là whitespace: byte-order mark (U+FEFF), zero-width space (U+200B), zero-width joiner và non-joiner (U+200D, U+200C), word joiner (U+2060), và soft hyphen (U+00AD). Đây là các ký tự điều khiển định dạng, không phải dấu cách, hầu hết các báo cáo «văn bản đã làm sạch nhưng vẫn còn sai gì đó» đều bắt nguồn từ một trong số đó.
Công cụ này làm gì, từng tùy chọn một
- Cắt dấu cách đầu/cuối mỗi dòng: bỏ whitespace ở đầu và cuối mỗi dòng riêng lẻ. Hữu ích để làm sạch các trích dẫn thụt lề từ email, hoặc padding bên phải vô tình thêm vào khi copy-paste.
- Thu gọn nhiều dấu cách thành một: chuỗi hai dấu cách trở lên thành một dấu cách đơn. Xử lý thói quen máy đánh chữ gõ hai dấu cách sau dấu chấm (mà hầu hết các hướng dẫn phong cách hiện đại (Chicago, AP) không khuyến khích).
- Xóa dòng trắng: loại bỏ mọi dòng trống hoặc chỉ chứa whitespace. Nhu cầu phổ biến khi dán văn bản từ PDF.
- Chuyển tab thành dấu cách: thay mỗi
\tbằng dấu cách. Hãy thận trọng với code: Python và YAML nhạy cảm với whitespace, và Makefile thực sự yêu cầu thụt lề bằng tab trong các dòng recipe. - Cắt whitespace đầu/cuối toàn bộ văn bản: bỏ whitespace đầu và cuối toàn bộ chuỗi cùng lúc (tương đương
trim()trong JavaScript). - Thu gọn nhiều dấu xuống dòng thành một: chuỗi ký tự xuống dòng liên tiếp thành một dấu xuống dòng. Hữu ích khi «Xóa dòng trắng» quá triệt để và bạn muốn giữ một dòng trống cho ngắt đoạn văn.
Cả sáu tùy chọn là các nút bật/tắt độc lập (bỏ chọn bất kỳ cái nào bạn muốn bỏ qua) và mỗi cái chỉ chạy trên văn bản bạn dán. Không có gì được tải lên; việc làm sạch diễn ra trong trình duyệt của bạn qua các lượt JavaScript regex.
Khi nào bạn dùng công cụ này
- PDF và tài liệu Word. PDF chèn ngắt dòng cứng ở cuối mỗi dòng hiển thị và đôi khi giữ dấu gạch nối; văn bản Word khi dán thường có no-break space giữa số và đơn vị (10 km), xung quanh dấu câu tiếng Pháp, hoặc sau danh hiệu như Mr. Smith.
- Chuẩn hóa đầu vào người dùng. Dấu cách thừa trong trường «Name» hoặc email khiến
"Smith"và"Smith "so sánh không bằng nhau. Xóa chúng khi nhập (hoặc trước khi tra cứu) loại bỏ toàn bộ lớp lỗi «user not found». - Chuẩn bị CSV và TSV. Giá trị trường có dấu cách đầu hoặc cuối phá vỡ các parser downstream vốn kỳ vọng khóa khớp chính xác. Xuất CSV UTF-8 của Excel âm thầm thêm byte-order mark vào đầu, mà parser downstream không xóa BOM sẽ thấy là phần của tiêu đề cột đầu tiên, tạo ra
colnametrông lạ. - Bản thảo Markdown và blog. Nhiều dòng trống liên tiếp kết xuất thành một block trong Markdown nhưng làm phình file nguồn và làm diff ồn ào.
- Chữ ký email, bản ghi chat và mã định danh: làm sạch nhanh trước khi dán vào tài liệu khác, hoặc trước khi gửi mã khuyến mãi hay licence key cho API nghiêm ngặt về whitespace.
Các cạm bẫy thường gặp
- Xóa whitespace đầu dòng làm hỏng code. Python và YAML dùng thụt lề làm cú pháp. Xóa nó đi và file trông y hệt nhưng sẽ không parse được.
- Chuyển đổi tab làm hỏng Makefile. GNU make từ chối chạy nếu các dòng recipe thụt lề bằng dấu cách thay vì tab. Điều tương tự áp dụng cho đầu ra gofmt của Go.
- NBSP trông giống hệt dấu cách. Người dùng thường thấy một «space» đơn giữa hai từ và giả định mọi công cụ làm sạch đều bắt được. Regex
\scủa JavaScript khớp với no-break space trên các trình duyệt hiện đại, nhưng nếu bạn viết regex riêng trong ngôn ngữ khác (hoặc môi trường rất cũ) bạn có thể cần liệt kê NBSP một cách rõ ràng. - Whitespace cuối dòng trong Markdown có ý nghĩa. Hai dấu cách ở cuối dòng Markdown tạo ra ngắt dòng
<br>. Cắt whitespace cuối dòng theo từng dòng sẽ xóa các ngắt dòng đó; nếu bạn phụ thuộc vào chúng, hãy để tùy chọn tắt. - Dấu xuống dòng Windows. File sao chép từ nguồn Windows dùng CRLF (
\r\n). Các lượt «xóa dòng trắng» và «thu gọn xuống dòng» cần nhận biết CR; nếu không, một\rlạc có thể tồn tại ở cuối mỗi dòng. - Ký tự zero-width tồn tại qua lần xóa whitespace. ZWSP (U+200B), ZWJ (U+200D), ZWNJ (U+200C), word joiner (U+2060), và soft hyphen (U+00AD) không phải whitespace Unicode, vì vậy công cụ làm sạch whitespace thông thường sẽ không chạm vào chúng. Nếu văn bản của bạn cảm thấy lạ sau khi làm sạch, hãy dán vào hex viewer hoặc trình kiểm tra «invisible character» riêng biệt.
- Không thể hoàn tác sau khi sao chép hoặc đóng trang. Việc làm sạch không thể hoàn tác trong trang này, không có lịch sử hoàn tác. Hãy giữ bản gốc ở đâu đó nếu bạn có thể cần.
Bối cảnh kỹ thuật ngắn
Công cụ này chạy hoàn toàn trong trình duyệt của bạn dùng regex engine tích hợp của JavaScript. String.prototype.trim() trong các engine hiện đại (mọi evergreen browser từ khoảng năm 2015) bỏ cả no-break space lẫn byte-order mark, vì đặc tả ECMAScript định nghĩa tập trim của nó là hợp của các production WhiteSpace và LineTerminator, danh sách bao gồm tab, dấu cách thường, NBSP, BOM, các typographic space, và CR / LF / LS / PS line break. Nó loại trừ chỉ một ký tự whitespace Unicode, U+0085 (NEL), một điều kỳ lạ kế thừa từ EBCDIC và hầu như không bao giờ xuất hiện trong văn bản hiện đại.
Với đầu vào rất lớn, phần chậm hiếm khi là lượt regex, mà là viết kết quả trở lại textarea và render lại DOM. Đầu vào đến vài megabyte thường ổn trên laptop hiện đại; vượt quá đó, các công cụ command-line (tr, sed, awk, hoặc script Python ngắn) thường nhanh hơn.
Câu hỏi thêm
Sự khác biệt giữa dấu cách thường và no-break space là gì?
Chúng kết xuất cùng chiều rộng nhưng no-break space (NBSP, U+00A0) yêu cầu bộ kết xuất không ngắt dòng tại điểm đó. Word, Google Docs và nhiều CMS chèn nó giữa danh hiệu và họ (Mr. Smith), giữa số và đơn vị (10 km), hoặc xung quanh ký hiệu tiền tệ ($ 5). Đây là ký tự «weird» phổ biến nhất khi tìm thấy trong văn bản dán, và đó là lý do tại sao khoảng cách trông giống nhau giữa hai từ đôi khi chống lại regex viết cho dấu cách thường.
Công cụ này có xóa ký tự zero-width hoặc byte-order mark không?
Xử lý whitespace của JavaScript thường bắt được byte-order mark (U+FEFF). Nó không bắt được zero-width space (U+200B), zero-width joiner (U+200D), zero-width non-joiner (U+200C), word joiner (U+2060), hay soft hyphen (U+00AD), Unicode không phân loại chúng là whitespace, vì vậy chúng tồn tại qua lượt whitespace theo thiết kế. Nếu bạn nghi ngờ một trong số đó có trong văn bản của mình, bạn sẽ cần trình kiểm tra invisible-character thay thế.
Tại sao dòng trắng và nhiều dấu xuống dòng liên tiếp là hai tùy chọn riêng biệt?
«Xóa dòng trắng» xóa mọi dòng trống, kết quả là một khối văn bản liên tục không có ngắt đoạn. «Thu gọn nhiều dấu xuống dòng thành một» giữ một dấu xuống dòng duy nhất giữa các đoạn và chỉ xóa các dấu thừa. Nếu bạn muốn các đoạn dễ đọc trong đầu ra, hãy để tắt tùy chọn đầu tiên và dùng tùy chọn thứ hai.
Có giới hạn độ dài không?
Không có giới hạn cứng, công cụ có thể xử lý thoải mái văn bản trong khoảng hàng chục nghìn đến vài triệu ký tự trên laptop hiện đại. Giới hạn là hiệu suất textarea của trình duyệt: các lần dán rất lớn bắt đầu bị lag khi nhập hoặc sao chép, không phải trong bước làm sạch.
Có dữ liệu nào được gửi lên máy chủ không?
Không. Văn bản không bao giờ rời khỏi trình duyệt của bạn. Việc làm sạch chạy cục bộ trong JavaScript, kết quả được viết trở lại vào textarea trên cùng trang, và bạn có thể dùng trang ngoại tuyến sau khi đã tải. Điều tương tự áp dụng cho mọi công cụ trên Absolutool.