[Được chuyển từ một Q trùng lặp về các trimcuộc đấu tranh với NBSP.] Các ghi chú sau đây hợp lệ với PHP 7.2+. Dặm có thể thay đổi với các phiên bản trước đó [vui lòng báo cáo trong phần bình luận].
PHP trimbỏ qua các khoảng trắng không ngắt. Nó chỉ cắt các khoảng trắng được tìm thấy trong phạm vi ASCII cơ bản. Để tham khảo, mã nguồn cho trim đọc như sau [nghĩa là không có tính năng không có tài liệu với trim]:
[c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == '\v' || c == '\0']Trong số trên, ngoài khoảng trắng thông thường [ASCII 32, ], đây là tất cả các ký tự điều khiển ASCII; LF [10 \n:], CR [13 \r:], HT [9 \t:], VT [11 \v:], NUL [0 \0:]. [Lưu ý rằng trong PHP, bạn phải trích dẫn kép các ký tự thoát: "\n", "\t"vv .. Nếu không chúng được phân tích cú pháp thành chữ, \nv.v.]
Sau đây là những hiện thực đơn giản trong ba hương vị của trim[ ltrim, rtrim, trim], sử dụng preg_replace, mà làm việc với chuỗi Unicode:
preg_replace['~^\s+~u', '', $string] // == ltrim preg_replace['~\s+$~u', '', $string] // == rtrim preg_replace['~^\s+|\s+$~us', '', $string] // == trimHãy thoải mái gói chúng vào các mb_*trimchức năng của riêng bạn .
Theo thông số kỹ thuật PCRE , \ský tự chuỗi thoát "bất kỳ khoảng trắng nào" khi bật uchế độ Unicode sẽ khớp với tất cả các ký tự khoảng trắng sau:
Bạn có thể thấy một sự lặp lại thử nghiệm của preg_replacevới ucờ Unicode giải quyết tất cả các không gian được liệt kê. Tất cả chúng đều được cắt tỉa như mong đợi, tuân theo thông số kỹ thuật của PCRE. Nếu bạn chỉ nhắm mục tiêu các không gian ngang ở trên, \hsẽ đối sánh chúng, cũng như \vvới tất cả các không gian dọc.
Việc sử dụng \p{Z}saw trong một số câu trả lời sẽ không thành công trong một số lần đếm; đặc biệt, với hầu hết các khoảng trắng ASCII, và đáng ngạc nhiên là cả với dấu phân tách nguyên âm tiếng Mông Cổ. Hốt Tất Liệt sẽ rất tức giận. Đây là danh sách các lỗi bỏ sót với \p{Z}: U + 0009 Tab ngang [HT] , U + 000A Linefeed [LF] , U + 000C Form feed [FF] , U + 000D Carriage return [CR] , U + 0085 Dòng tiếp theo [NEL] , và dấu phân tách nguyên âm tiếng Mông Cổ U + 180E .
Về lý do tại sao điều đó xảy ra, thông số kỹ thuật PCRE ở trên cũng lưu ý: " \s bất kỳ ký tự nào khớp \p{Z}hoặc \hhoặc\v ". Đó là, \slà một tập hợp siêu của \p{Z}. Sau đó, chỉ cần sử dụng \sthay cho \p{Z}. Nó toàn diện hơn và việc nhập sẽ rõ ràng hơn ngay lập tức đối với ai đó đang đọc mã của bạn, những người có thể không nhớ các ký tự rút gọn cho tất cả các loại ký tự.
1 hữu ích 0 bình luận chia sẻ