জাভাস্ক্রিপ্ট স্ট্রিং নিউলাইন চরিত্র?


424

\nসব প্ল্যাটফর্মের জন্য জাভাস্ক্রিপ্টে সর্বজনীন নিউলাইন চরিত্রের অনুক্রমটি কি ? যদি তা না হয় তবে আমি বর্তমান পরিবেশের জন্য চরিত্রটি কীভাবে নির্ধারণ করব?

আমি এইচটিএমএল নিউলাইন উপাদান ( <BR/>) সম্পর্কে জিজ্ঞাসা করছি না । আমি জাভাস্ক্রিপ্ট স্ট্রিংয়ের মধ্যে ব্যবহৃত নিউলাইন চরিত্রের ক্রম সম্পর্কে জিজ্ঞাসা করছি।


5
আমার কাছে একটি মাল্টলাইন ইনপুট নিয়ন্ত্রণ রয়েছে যেখানে ব্যবহারকারী একটি নতুন লাইন বিচ্ছিন্ন তালিকায় প্রবেশ করবে বলে আশা করা হচ্ছে। আমাকে নতুন লাইনে স্ট্রিং বিভক্ত করে তালিকাটি বিশ্লেষণ করতে হবে।
ল্যান্ডন কুহান

7
@ ল্যান্ডন9720: আমার মাল্টলাইন ইনপুট নিয়ন্ত্রণগুলির জন্য, আমার একটি getValueফাংশন রয়েছে যা গ্রহণ করে valueএবং ফিরে আসে value.replace(/\r\n/g,'\n')- কেবলমাত্র ব্রাউজারগুলি / প্ল্যাটফর্মগুলিতে আউটপুট সামঞ্জস্য রাখতে।
রায় টিঙ্কার

1
বিশেষত যারা প্রোগ্রামিংয়ে নতুন তাদের জন্য ভাল প্রশ্ন! এইচটিএমএলের বাইরে এবং জাভাস্ক্রিপ্টে পরবর্তী / নতুন লাইনে কীভাবে ব্রেক করতে হবে তা জানা ভাল।
এরিক বিশার্ড

চেকআউট npmjs.com/package/eol
ryanve

উত্তর:


362

আমি জাভাস্ক্রিপ্টের এই নির্বোধ বিটটি ব্যবহার করে কয়েকটি ব্রাউজার পরীক্ষা করেছি:

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>

উইন্ডোজ ব্যবহারে আইই 8 এবং অপেরা 9 \r\n। আমি পরীক্ষিত অন্যান্য সমস্ত ব্রাউজার (উইন্ডোতে সাফারি 4 এবং ফায়ারফক্স 3.5, এবং লিনাক্সে ফায়ারফক্স 3.0) ব্যবহার করে \n\nমান নির্ধারণের সময় এগুলি সকলেই ঠিকঠাক পরিচালনা করতে পারে, যদিও আইই এবং অপেরা সেটিকে \r\nআবার অভ্যন্তরীণভাবে রূপান্তরিত করে । জাভা স্ক্রিপ্টে লাইন এন্ডিংস নামে আরও কিছু বিশদ সহ একটি সাইটপয়েন্ট নিবন্ধ রয়েছে ।

এছাড়াও নোট করুন যে এই HTML ফাইল নিজেই প্রকৃত লাইন শেষা w শ স্বাধীন (উভয় \nএবং \r\nএকই ফলাফল দিতে)।

কোনও ফর্ম জমা দেওয়ার সময়, সমস্ত ব্রাউজারগুলি %0D%0Aইউআরএল এনকোডিংয়ে নিউলাইনগুলিকে প্রমিত করে তোলে । এটি দেখতে, উদাহরণস্বরূপ লোড করুন data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>এবং জমা দিন বোতামটি টিপুন। (কিছু ব্রাউজার জমা দেওয়া পৃষ্ঠার লোডকে ব্লক করে তবে কনসোলটিতে আপনি ইউআরএল-এনকোডযুক্ত ফর্ম মান দেখতে পারেন।)

যাইহোক, আপনাকে কোনও নির্ধারণের অনেক কিছুই করার দরকার নেই বলে আমি মনে করি। আপনি যদি কেবল নতুন লাইনে পাঠ্যটি বিভক্ত করতে চান তবে আপনি এরকম কিছু করতে পারেন:

lines = foo.value.split(/\r\n|\r|\n/g);

14
আমার জন্য কাজ করা হয়েছে, যদিও বিশ্বব্যাপী পতাকাটি ব্যবহার করতে হয়েছিল: / \ r \ n | \ r | \ n / g
অ্যাড্রিয়ানোফেরারি

17
@ অ্যাডসন এবং ভুল, যেহেতু এটি \r\nএকের পরিবর্তে দুটি নতুন লাইন হিসাবে বিবেচিত হবে। আপনি যদি সংক্ষিপ্ত চান, /\r?\n/gসম্ভবত করবেন (এখনও যিনি এখনও ম্যাক ওএস 9 ব্যবহার করেন?)
মেরেটরেটার

1
সাইটপয়েন্ট নিবন্ধটি 2004 সালের দেওয়া, সেখানকার তথ্য বর্তমান জেএস বাস্তবায়নের সাথে প্রাসঙ্গিক নাও হতে পারে।
সিবিম্যানিকা

ম্যাচটি বিভাজনের চেয়ে অনেক বেশি দ্রুত গতিযুক্ত
উইল্ট

এটি ওভারকিলের মতো বলে মনে হচ্ছে, সহজ সমাধানের জন্য নীচে আমার উত্তরটি দেখুন!
কাসিম

81

হ্যাঁ, এটি সর্বজনীন।

যদিও '\n'সর্বজনীন নিউলাইন চরিত্রগুলি, তবে আপনার মনে রাখতে হবে যে আপনার ইনপুটটির উপর নির্ভর করে নতুন রেখার অক্ষরগুলি আগে গাড়ীর ফেরতের অক্ষর ( '\r') হতে পারে ।


55
। n সর্বজনীন লাইন ফিড অক্ষর (এলএফ)। সঠিক নিউলাইন বাইট ক্রম প্ল্যাটফর্মের উপর নির্ভর করে (\ r \ n, \ n, বা \ r: en.wikedia.org/wiki/Newline )। আর যে প্রশ্ন Landon চাইছে। আপনি যখন নিজেকে প্রথমে বলবেন যে এটি সর্বজনীন নিউলাইন চরিত্র, তখন আপনি নিজের সাথে বিরোধিতা করছেন এবং তারপরে বলবেন এটি কোনও সিআর আগে থাকতে পারে। এটা কোনটা?
মার্টেটর

2
riage n হ'ল নিউলাইন (লাইন ফিড) অক্ষর, এমনকি যদি এটি ক্যারিজ রিটার্নের পূর্ববর্তী হয়। সিআর কখনই নিজের ব্যবহার করা উচিত নয়, যদিও বেশিরভাগ উইন্ডোজ এপিস এবং অ্যাপস এটিকে একটি নতুন লাইন হিসাবে পার্স করবে। এলএফ উইন্ডোজেও ঠিক একইভাবে কাজ করে। কম্পিউটার কেবলমাত্র বৈদ্যুতিন টাইপরাইটার ছিল সে সময় থেকেই সিআর একটি নিদর্শন।
গোলেজট্রোল

3
@ গোলেজট্রোল নিজেরাই সিআর ব্যবহারের বৈধ কারণ রয়েছে। উদাহরণস্বরূপ, পরের লাইনে না গিয়ে লাইনটি ওভাররাইট করার জন্য কনসোল উইন্ডোতে লাইনের শুরুতে ফিরে আসা। এটি প্রায়শই কমান্ড লাইন ইউটিলিটিগুলিতে পরিবর্তনশীল শতাংশ অগ্রগতি সূচক লিখতে ব্যবহৃত হয়।
ড্যান বেচার্ড

2
@ ড্যান প্রতিক্রিয়া জন্য ধন্যবাদ। অবশ্যই, আমার কখনই "কখনই" বলা উচিত ছিল না, কারণ সত্যিকার অর্থে একটি সিআর এর নিজস্ব প্রয়োগ রয়েছে। তবে প্রশ্নটি জাভাস্ক্রিপ্ট সম্পর্কে কমান্ড লাইন ইউটিলিটিগুলি সম্পর্কে নয়। অবশ্যই সিএলআই মোডে একটি স্ক্রিপ্ট চলতে পারে (যদিও আমি জানিনা যে সিআর তখন আপনার মতো কাজ করবে কিনা), এবং আপনি জাভাস্ক্রিপ্ট ব্যবহার করতে পারেন এমন একটি স্ক্রিপ্ট তৈরি করতে যা কমান্ড লাইনে চালিত হয়। এগুলি নিয়মটিতে সম্ভাব্য ব্যতিক্রম তবে প্রশ্নটির প্রসঙ্গে তারা প্রয়োগ করতে পারে না বলে মনে হয়। তবুও, এটি উল্লেখ করার জন্য ধন্যবাদ।
গোলেজট্রোল

65

"\ N" ব্যবহার করবেন না। শুধু এটি চেষ্টা করুন:

var string = "this\
is a multi\
line\
string";

কেবল একটি পিছনে স্ল্যাশ প্রবেশ করুন এবং ট্রকিন চালিয়ে যান '! একটি যাদুমন্ত্র মত কাজ করে.


ES6 tildeঅক্ষরটির সাথে মাল্টলাইন মানগুলি সমর্থন করে (অন্যথায় ব্যাকটিক নামে পরিচিত)।
কাসিম

10
@Qasim - অবগতির জন্য, আমি বিশ্বাস করি টিল্ড এবং ব্যাকটিক বিভিন্ন অক্ষর দেখতে ~টিল্ডা বনাম `ব্যাকটিক
ক্রিস বার্গেস

1
আহ - হ্যাঁ, আপনি ঠিক বলেছেন। ES6 মাল্টলাইন স্ট্রিংগুলির জন্য ব্যাকটিক চরিত্রটি ব্যবহার করে
কাসিম

2
যদিও আইনী, এটি জেএস চেনাশোনাগুলিতে অস্বীকার করা হয়েছে। এতে পাঠযোগ্যতার অভাব রয়েছে। যদি আপনি পারেন তবে ES6 এর ব্যাকটিকগুলি ব্যবহার করুন। যদি তা না হয় তবে \ n
getofritz

3
কোড লেখার সময় এটি কাজ করে। দেখে মনে হচ্ছে ওপি কোনও টেক্সারিয়ার পাঠ্যকে বিশ্লেষণ করতে চলেছে।
জিঙ্গলেস্টুলা

53

কোন ক্ষেত্রে কেস প্রয়োগ করে তা পরীক্ষা না করে কেবল নতুন লাইন চরিত্রের সমস্ত কেস পরিচালনা করা সবচেয়ে সহজ হতে পারে। উদাহরণস্বরূপ, আপনার যদি নতুন লাইনটি প্রতিস্থাপন করতে হয় তবে নিম্নলিখিতগুলি করুন:

htmlstring = stringContainingNewLines.replace(/(\r\n|\n|\r)/gm, "<br>");

1
চমত্কার। পরবর্তী সংস্করণগুলি এফএফ এবং
আইইতে


13

ইমেল লিঙ্ক ফাংশন আমি "% 0D% 0A" ব্যবহার করি

function sendMail() {   
var bodydata="Before "+ "%0D%0A";
    bodydata+="After"

var MailMSG = "mailto:aaa@sss.com" 
         + "?cc=07@sss.com" 
         + "&subject=subject" 
         + "&body=" + bodydata; 
window.location.href = MailMSG; 
} 

[এইচটিএমএল]

<a href="#" onClick="sendMail()">Contact Us</a>

ট্যাব কী জন্য এই ধরণের কোডটি কি কেউ জানেন? আমি "% 0D% 09" চেষ্টা করেছি কিন্তু কাজ করছি না।
নিলে

7

বর্তমান ব্রাউজারের জন্য একটি লাইন বিভাজক পান:

function getLineSeparator() {
  var textarea = document.createElement("textarea");
  textarea.value = "\n"; 
  return textarea.value;
}

3
কীভাবে return textarea.value;?
এক্সপি 1

JSON.stringifyফলাফল ব্যবহার করে চরিত্রের পরিবর্তন হবে? যদি আমি কোনও alert()কলটিতে ফলাফলটি দেখার চেষ্টা করি তবে আমি প্রথমে স্ট্রিংটি না করা না হলে এটি চরিত্রটি দেখায় না (অবশ্যই যে চরটি কার্যকরভাবে কার্যকরভাবে পাঠযোগ্য হতে হবে)

4

একটি নোট - এক্সটেনডস্ক্রিপ্ট জাভাস্ক্রিপ্ট ব্যবহার করার সময় (ফটোশপ সিএস 3 এর মতো অ্যাপ্লিকেশনে ব্যবহৃত অ্যাডোব স্ক্রিপ্টিং ভাষা) ব্যবহার করার জন্য অক্ষরটি "\ r" is "\ n" হরফ অক্ষর হিসাবে ব্যাখ্যা করা হবে, এবং অনেক ফন্টের পরিবর্তে একটি ব্লক অক্ষর থাকবে।

উদাহরণস্বরূপ ('নোট' নামে একটি স্তর নির্বাচন করতে এবং সমস্ত পিরিয়ড পরে লাইন ফিড যোগ করতে):

var layerText = app.activeDocument.artLayers.getByName('Note').textItem.contents;
layerText = layerText.replace(/\. /g,".\r");

আমার ফটোশপ স্ক্রিপ্টে কেন \nএবং কেন <br/>কাজ করছে না তা জানার চেষ্টা করছিল ... ধন্যবাদ!
জ্যাক স্টোফ্লার 3

3

আপনি ES6 সহ `` উদ্ধৃতি (যেটি Esc বোতামের নীচে রয়েছে) ব্যবহার করতে পারেন। সুতরাং আপনি এই জাতীয় কিছু লিখতে পারেন:

var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;

1

আমি বিশ্বাস করি এটি হ'ল - আপনি যখন জেএস স্ট্রিংয়ের সাথে কাজ করছেন।

আপনি যদি এইচটিএমএল তৈরি করে থাকেন তবে আপনাকে <br />ট্যাগ ব্যবহার করতে হবে ( \nআপনি আর জেএসের সাথে কাজ করছেন না বলে)


1

Line n বা \ r \ n দিয়ে নিউলাইনটি প্রকাশ করার ক্ষেত্রে আমার সমস্যা ছিল ।
আশ্চর্যজনকভাবে চরিত্র পান \ r যা গাড়ি ফেরত জন্য ব্যবহার করা হয় একটি newline মত আমার কাজ করেন।
তাই কিছু ক্ষেত্রে \ r কেও বিবেচনা করা কার্যকর।


যদি আপনার স্ট্রিংয়ের আইএসও
-8859-1 চরসেট থাকে

0
printAccountSummary: function()
        {return "Welcome!" + "\n" + "Your balance is currently $1000 and your interest rate is 1%."}
};
console.log(savingsAccount.printAccountSummary()); // method

ছাপে:

Welcome!
Your balance is currently $1000 and your interest rate is 1%.

0

একটি ব্যবহারিক পর্যবেক্ষণ ... আমার নোডজেএস স্ক্রিপ্টে আমার নিম্নলিখিত ফাংশন রয়েছে:

function writeToLogFile (message) {
    fs.appendFile('myserverlog.txt', Date() + " " + message + "\r\n", function (err) {
        if (err) throw err;
    });
}

প্রথমে আমার কেবল "\ n" ছিল তবে আমি লক্ষ্য করেছি যে আমি নোটপ্যাডে লগ ফাইলটি খুললে এটি একই লাইনে সমস্ত এন্ট্রি দেখায়। অন্যদিকে নোটপ্যাড ++ প্রতিটি তাদের নিজস্ব লাইনে থাকা এন্ট্রিগুলি দেখায়। কোডটি "\ r \ n" এ পরিবর্তন করার পরেও নোটপ্যাড প্রতিটি লাইন তার নিজস্ব লাইনে দেখায়।


-3

\nসব ক্ষেত্রেই আমি সম্মুখীন হয়েছি মাত্র জরিমানা। আমি ওয়েবের সাথে কাজ করছি, ব্যবহার করব \nএবং এটি সম্পর্কে চিন্তা করবেন না (যদি আপনার কোনও নতুন লাইন-সম্পর্কিত সমস্যা না থাকে)।


-13

আপনি ব্যবহার করতে পারেন <br/>এবং document.write/, document.writelnএক।


4
প্রশ্নটি আবার পড়ুন। এটা বিশেষভাবে বলেন হয় না সম্পর্কে জিজ্ঞাসা করা<br>
লে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.