Có vẻ như, theo thông số kỹ thuật HTML5 , thuộc tính giá trị của phần tử textarea sẽ trả về '\ r \ n' cho một dòng mới:
Giá trị của phần tử được xác định là giá trị thô của phần tử với phép biến đổi sau được áp dụng:
Thay thế mọi lần xuất hiện của ký tự "CR" (U + 000D) không theo sau bằng ký tự "LF" (U + 000A) và mọi lần xuất hiện của ký tự "LF" (U + 000A) không đứng trước ký tự "CR" ( Ký tự U + 000D), bởi một chuỗi hai ký tự bao gồm cặp ký tự U + 000D CARRIAGE RETURN "CRLF" (U + 000A).
Theo liên kết tới 'value' làm rõ rằng nó đề cập đến thuộc tính value được truy cập trong javascript:
Các điều khiển biểu mẫu có một giá trị và một độ kiểm tra. (Cái sau chỉ được sử dụng bởi các phần tử đầu vào.) Chúng được sử dụng để mô tả cách người dùng tương tác với điều khiển.
Tuy nhiên, trong tất cả năm trình duyệt chính (sử dụng Windows, 27/11/2015), nếu '\ r \ n' được ghi vào một vùng văn bản, thì '\ r' sẽ bị loại bỏ. (Để kiểm tra: var e = document.createElement ('textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) Điều này đúng với IE kể từ phiên bản 9. Trước đó, IE đã trả về '\ r \ n' và chuyển đổi cả '\ r' và '\ n' thành '\ r \ n' (đó là thông số kỹ thuật HTML5). Vì vậy ... tôi bối rối.
Để an toàn, thường là đủ để sử dụng '\ r? \ N' trong biểu thức chính quy thay vì chỉ '\ n', nhưng nếu dãy dòng mới phải được biết, có thể thực hiện kiểm tra như trên trong ứng dụng.