ตัวอักขระขึ้นบรรทัดใหม่ในสตริงของ JavaScript คืออะไร?
ตัวอักษร \n เป็นลำดับอักขระ newline สากลใน JavaScript สำหรับทุกแพลตฟอร์มหรือไม่? ถ้าไม่ใช่ ฉันจะกำหนดตัวอักษรสำหรับสภาพแวดล้อมปัจจุบันได้อย่างไร?
ฉันไม่ได้ถามเกี่ยวกับองค์ประกอบขึ้นบรรทัดใหม่ของ HTML (<BR/>) ฉันกำลังถามเกี่ยวกับลำดับอักขระขึ้นบรรทัดใหม่ที่ใช้ภายในสตริงของ JavaScript
คำตอบ #1
ฉันเพิ่งทดสอบเบราว์เซอร์ไม่กี่ตัวโดยใช้โค้ด JavaScript งี่เง่านี้:
function log_newline(msg, test_value) {
if (!test_value) {
test_value = document.getElementById('test').value;
}
console.log(msg + ': ' + (test_value.match(/\r/) ? 'CR' : '')
+ ' ' + (test_value.match(/\n/) ? 'LF' : ''));
}
log_newline('HTML source');
log_newline('JS string', "foo\nbar");
log_newline('JS template literal', `bar
baz`);<textarea id="test" name="test">
</textarea>IE8 และ Opera 9 บน Windows ใช้ \r\n เบราว์เซอร์อื่น ๆ ที่ผมทดสอบ (Safari 4 และ Firefox 3.5 บน Windows และ Firefox 3.0 บน Linux) ใช้ \n ทั้งหมด พวกมันสามารถจัดการ \n ได้อย่างดีเมื่อกำหนดค่าเป็นค่าใหม่ แม้ว่า IE และ Opera จะเปลี่ยนกลับเป็น \r\n อีกครั้งภายใน มีบทความของ SitePoint ที่มีรายละเอียดเพิ่มเติมชื่อ Line endings in Javascript.
โปรดทราบด้วยว่านี่เป็นอิสระจากการขึ้นบรรทัดจริงในไฟล์ HTML เอง (ทั้ง \n และ \r\n ให้ผลลัพธ์เหมือนกัน)
เมื่อส่งแบบฟอร์ม เบราว์เซอร์ทุกตัวจะทำการทำให้บรรทัดใหม่เป็นมาตรฐานเป็น %0D%0A ในการเข้ารหัส URL ในการตรวจสอบเรื่องนี้ ให้โหลดเช่น data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form> และกดปุ่มส่ง (บางเบราว์เซอร์อาจบล็อกการโหลดหน้าที่ส่งไป แต่คุณสามารถดูค่าฟอร์มที่เข้ารหัส URL ได้ในคอนโซล)
ฉันคิดว่าคุณคงไม่จำเป็นต้องทำการตัดสินใจอะไรมากนักหรอก ถ้าคุณแค่อยากจะแยกข้อความตามบรรทัดใหม่ คุณสามารถทำอะไรสักอย่างแบบนี้ได้:
lines = foo.value.split(/\r\n|\r|\n/g);
คำตอบ #2
ใช่ มันเป็นสากล
แม้ว่า '\n' จะเป็นอักขระ ขึ้นบรรทัดใหม่ สากล แต่คุณต้องจำไว้ว่า ขึ้นอยู่กับข้อมูลนำเข้าของคุณ ตัวอักขระขึ้นบรรทัดใหม่อาจมีตัวอักขระ carriage return ('\r') นำหน้า
คำตอบ #3
อาจจะง่ายที่สุดเพียงแค่จัดการกับทุกกรณีของตัวอักขระขึ้นบรรทัดใหม่แทนที่จะตรวจสอบว่ากรณีใดแล้วค่อยนำไปใช้ ตัวอย่างเช่น หากคุณต้องการแทนที่ตัวขึ้นบรรทัดใหม่ ให้ทำดังนี้:
htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");
คำตอบ #4
ใช่ ใช้ \n เว้นแต่ว่าคุณกำลังสร้างโค้ด HTML ซึ่งในกรณีนั้นคุณควรใช้ <br />
คำตอบ #5
ด้วย ES6 คุณสามารถใช้เครื่องหมายอัญประกาศกลับ (` `) ซึ่งอยู่ใต้ปุ่ม Esc บนแป้นพิมพ์แบบ US ที่มีขนาด 75% หรือมากกว่า ดังนั้นคุณสามารถเขียนบางสิ่งบางอย่างเช่นนี้ได้:
var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;
คำตอบ #6
ในฟังก์ชันลิงก์อีเมล ฉันใช้ "%0D%0A":
function sendMail() {
var bodydata="Before "+ "%0D%0A";
bodydata+="After"
var MailMSG = "mailto:[email "
+ "[email "
+ "&subject=subject"
+ "&body=" + bodydata;
window.location.href = MailMSG;
}
HTML
<a href="#" onClick="sendMail()">Contact Us</a>
