আপডেট: সিএসএসে এটি পরিচালনা করা আশ্চর্যজনকভাবে সহজ এবং লো ওভারহেড, তবে যখন বিরতিগুলি ঘটে তখন আপনার কোনও নিয়ন্ত্রণ নেই। আপনার যত্ন না নিলে এটি ঠিক আছে, বা কোনও প্রাকৃতিক বিরতি ছাড়াই আপনার ডেটা দীর্ঘ অক্ষরে অক্ষরে চলেছে। আমাদের প্রচুর লম্বা ফাইল পাথ, ইউআরএল এবং ফোন নম্বর ছিল, এর সবকটিতেই অন্যদের তুলনায় এটি ভাঙা উল্লেখযোগ্যভাবে ভাল।
আমাদের সমাধানটি হ'ল শ্বেত স্পেস নয় এমন একটি বিশেষ অক্ষর বা আমরা যেখানে বিরতি পছন্দ করতাম তার মধ্যে একটি বিশেষ অক্ষরগুলির পরে শূন্য-প্রস্থের স্থান (& # 8203;) লাগাতে প্রথমে একটি রেজেক্স প্রতিস্থাপন ব্যবহার করা হয়েছিল। তারপরে আমরা সেই বিশেষ অক্ষরের পরে শূন্য-প্রস্থের স্থান রাখতে অন্য প্রতিস্থাপন করি do
শূন্য প্রস্থের স্পেসগুলি দুর্দান্ত, কারণ এগুলি স্ক্রিনে কখনও দেখা যায় না; লাজুক হাইফেনগুলি যখন তারা দেখিয়েছিল তখন বিভ্রান্ত হয়েছিল, কারণ ডেটাটিতে উল্লেখযোগ্য হাইফেন রয়েছে। আপনি যখন ব্রাউজার থেকে পাঠ্য অনুলিপি করেন তখন শূন্য-প্রস্থের স্থানগুলিও অন্তর্ভুক্ত থাকে না।
আমরা বর্তমানে যে বিশেষ বিরতি অক্ষরগুলি ব্যবহার করছি তা হ'ল পিরিয়ড, ফরোয়ার্ড স্ল্যাশ, ব্যাকস্ল্যাশ, কমা, আন্ডারস্কোর, @, | এবং হাইফেন। হাইফেনের পরে ব্রেকিংকে উত্সাহিত করার জন্য আপনার কিছু করার দরকার হবে বলে আপনি ভাবেন না, তবে ফায়ারফক্স (কমপক্ষে 3.6 এবং 4) সংখ্যার (ফোন নম্বরগুলির মতো) ঘেরা হাইফেনগুলিতে নিজেই ভেঙে যায় না।
আমরা উপলব্ধ লেআউট জায়গার উপর ভিত্তি করে কৃত্রিম বিরতিগুলির মধ্যে অক্ষরের সংখ্যাও নিয়ন্ত্রণ করতে চেয়েছিলাম। এর অর্থ হ'ল দীর্ঘ বিরতিহীন রানের সাথে ম্যাচ করার জন্য রেজেক্সের গতিশীল হওয়া দরকার। এটি প্রচুর পরিমাণে বলা হয়ে থাকে এবং আমরা পারফরম্যান্সের কারণে একই ধরণের একই পুনর্নির্মাণগুলি তৈরি করতে চাই না, তাই আমরা রেগেক্স এক্সপ্রেশন এবং এর পতাকাগুলি দ্বারা চিহ্নিত একটি সাধারণ রেইগেক্স ক্যাশে ব্যবহার করেছি।
কোডটি এখানে; আপনি সম্ভবত কোনও ইউটিলিটি প্যাকেজে ফাংশনগুলির নাম উল্লেখ করেছেন:
makeWrappable = function(str, position)
{
if (!str)
return '';
position = position || 15; // default to breaking after 15 chars
// matches every requested number of chars that's not whitespace or one of the special chars defined below
var longRunsRegex = cachedRegex('([^\\s\\.\/\\,_@\\|-]{' + position + '})(?=[^\\s\\.\/\\,_@\\|-])', 'g');
return str
.replace(longRunsRegex, '$1​') // put a zero-width space every requested number of chars that's not whitespace or a special char
.replace(makeWrappable.SPECIAL_CHARS_REGEX, '$1​'); // and one after special chars we want to allow breaking after
};
makeWrappable.SPECIAL_CHARS_REGEX = /([\.\/\\,_@\|-])/g; // period, forward slash, backslash, comma, underscore, @, |, hyphen
cachedRegex = function(reString, reFlags)
{
var key = reString + (reFlags ? ':::' + reFlags : '');
if (!cachedRegex.cache[key])
cachedRegex.cache[key] = new RegExp(reString, reFlags);
return cachedRegex.cache[key];
};
cachedRegex.cache = {};
এর মতো পরীক্ষা করুন:
makeWrappable('12345678901234567890 12345678901234567890 1234567890/1234567890')
আপডেট করুন 2: মনে হচ্ছে আসলে শূন্য প্রস্থ স্পেস হয় অন্তত কিছু পরিস্থিতিতে কপি করা টেক্সট মধ্যে অন্তর্ভুক্ত, আপনি শুধু তাদের দেখতে পারে না। স্পষ্টতই, লোকেরা এতে লুকানো অক্ষরের সাথে পাঠ্য অনুলিপি করতে উত্সাহিত করা যেমন অন্য প্রোগ্রাম বা সিস্টেমে এমনকি আপনার নিজের ক্ষেত্রেও প্রবেশ করতে পারে এমন ডেটা থাকার আমন্ত্রণ where যেখানে এটি সমস্যার কারণ হতে পারে। উদাহরণস্বরূপ, এটি যদি কোনও ডাটাবেসে শেষ হয় তবে এর বিরুদ্ধে অনুসন্ধানগুলি ব্যর্থ হতে পারে এবং এর মতো অনুসন্ধানের স্ট্রিংগুলিও ব্যর্থ হতে পারে। এটির মতো ডেটা সরাতে তীর কীগুলি ব্যবহার করার জন্য আপনি দেখতে পাচ্ছেন না এমন চরিত্রটি অতিক্রম করার জন্য (সঠিকভাবে) একটি অতিরিক্ত কিপ্রেস প্রয়োজন, ব্যবহারকারীরা যদি তাদের লক্ষ্য করে তবে কিছুটা উদ্ভট।
একটি বদ্ধ সিস্টেমে আপনি নিজের সুরক্ষার জন্য এই চরিত্রটিকে ইনপুট থেকে ফিল্টার করতে পারেন, তবে এটি অন্যান্য প্রোগ্রাম এবং সিস্টেমগুলিকে সহায়তা করে না।
সবই বলা হয়েছিল, এই কৌশলটি ভালভাবে কাজ করে, তবে ব্রেক-কারণের চরিত্রের সেরা পছন্দটি কী হবে তা আমি নিশ্চিত নই।
আপডেট 3: এই চরিত্রটি ডেটা অবধি ধারণ করা এখন আর তাত্ত্বিক সম্ভাবনা নয়, এটি একটি পর্যবেক্ষণ সমস্যা। ব্যবহারকারীরা স্ক্রিন থেকে অনুলিপি করা ডেটা জমা দেয়, এটি ডিবিতে সংরক্ষণ হয়ে যায়, বিরতি সন্ধান করে, বিষয়গুলিকে অদ্ভুতভাবে সাজায় ইত্যাদি ..
আমরা দুটি জিনিস করেছি:
- এই অ্যাপ্লিকেশনটির জন্য সমস্ত ডাটাসোর্সে সমস্ত টেবিলের সমস্ত কলাম থেকে এগুলি সরাতে একটি ইউটিলিটি লিখেছিলেন।
- এটি আমাদের স্ট্যান্ডার্ড স্ট্রিং ইনপুট প্রসেসরে সরানোর জন্য ফিল্টারিং যোগ করা হয়েছে, সুতরাং কোনও কোড এটি দেখার সময় হয়ে যায়।
এটি কৌশলটি যেমন কাজ করে তেমনি ভাল কাজ করে তবে এটি একটি সতর্কতার কাহিনী।
আপডেট 4: আমরা এটি এমন একটি প্রসঙ্গে ব্যবহার করছি যেখানে এটি দেওয়া ডেটা এইচটিএমএল এড়ানো হতে পারে। সঠিক পরিস্থিতিতে, এটি মজাদার ফলাফল সহ এইচটিএমএল সত্তাদের মাঝখানে শূন্য প্রস্থের স্থান সন্নিবেশ করতে পারে।
ফিক্সটি হ'ল আমরা যে অক্ষরগুলি ভাঙ্গি না তার তালিকায় এম্পারস্যান্ড যুক্ত করা ছিল:
var longRunsRegex = cachedRegex('([^&\\s\\.\/\\,_@\\|-]{' + position + '})(?=[^&\\s\\.\/\\,_@\\|-])', 'g');