স্ট্রিং-এ অ-এসকিআই অক্ষর সরান


91
var str="INFO] :谷���新道, ひば���ヶ丘2丁���, ひばりヶ���, 東久留米市 (Higashikurume)";

এবং স্ট্রিং থেকে আমার সমস্ত অ-এসকি অক্ষর মুছে ফেলতে হবে,

মানে স্ট্রে শুধুমাত্র "INFO] (হিগাশিকুরুম)" থাকে;

উত্তর:


234

এএসসিআইআই 0 থেকে 127 এর মধ্যে রয়েছে, সুতরাং:

str.replace(/[^\x00-\x7F]/g, "");

8
@ আলেকজান্ডারমিলস একটি এসকিআই টেবিল অনুসন্ধান করুন - আপনি দেখতে পাচ্ছেন যে কেবলমাত্র শূন্য থেকে 127 এর মান রয়েছে এমন অক্ষরই বৈধ। (0x7F হেক্সে 127 হয়)। এই কোডটি এমন সমস্ত অক্ষরের সাথে মেলে যা অ্যাস্কি সীমার মধ্যে নেই এবং এগুলি মুছে ফেলে।
জাফি

ভাগ করে নেওয়ার জন্য ধন্যবাদ. 7 x7F কীভাবে কাজ করে তা বোঝাতে আপনার আপত্তি হবে? আবার ধন্যবাদ.
eyyo

4
@eyyo IIt শেষ চরিত্র ascii চরিত্র উপস্থাপন করে। আমি এই জাতীয় মন্তব্যে আপনাকে পূর্ণ ব্যাখ্যা দিতে পারব না। একে হেক্সাডেসিমাল এস্কেপ ক্রম বলা হয়, আপনি যদি এটি অনুসন্ধান করেন তবে অবশ্যই আপনি এটি সম্পর্কে প্রচুর তথ্য পাবেন।
জাফি

32

এটি অপসারণের ইতিবাচক দৃ with়তার সাথেও করা যেতে পারে:

textContent = textContent.replace(/[\u{0080}-\u{FFFF}]/gu,"");

এটি ইউনিকোড ব্যবহার করে। জাভাস্ক্রিপ্টে, নিয়মিত অভিব্যক্তির জন্য ইউনিকোড প্রকাশ করার সময়, অক্ষরগুলি পালানোর অনুক্রমের সাথে নির্দিষ্ট করা হয় \u{xxxx}তবে পতাকাটি 'u'অবশ্যই উপস্থিত থাকে; মনে রাখবেন রেগেক্সের পতাকা রয়েছে 'gu'

আমি এটিকে "অপসারণের ইতিবাচক দৃ "়তা" বলেছিলাম যে "ধনাত্মক" দৃser়তাটি কোন অক্ষরগুলি অপসারণ করার কথা প্রকাশ করে, যখন একটি "নেতিবাচক" উক্তিটি বর্ণগুলি সরায় না তা প্রকাশ করে। অনেক প্রসঙ্গে, পূর্বের উত্তরগুলিতে বর্ণিত নেতিবাচক দৃ .়তা পাঠকের পক্ষে আরও পরামর্শদায়ক হতে পারে। পরিধিটি " ^" "" নয় "বলে এবং পরিসীমাটি \x00-\x7F" ascii "বলে, সুতরাং দুজনে মিলে" ascii নয় "বলে say

textContent = textContent.replace(/[^\x00-\x7F]/g,"");

এটি কেবল ইংরেজী ভাষা সম্পর্কে যত্নশীল ইংরাজী ভাষাভাষীদের জন্য একটি দুর্দান্ত সমাধান এবং এটি মূল প্রশ্নের উত্তম উত্তর answer তবে আরও সাধারণ প্রেক্ষাপটে, "সব অ-অস্কিই খারাপ" বলে ধরে নেওয়ার সাংস্কৃতিক পক্ষপাতটি সর্বদা গ্রহণ করা যায় না। প্রাসঙ্গিক ক্ষেত্রে যেখানে অ-এস্কিই ব্যবহৃত হয় তবে মাঝে মাঝে তা ছড়িয়ে দেওয়া দরকার, ইউনিকোডের ইতিবাচক দৃ as়তা আরও ভাল।

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

> textContent
""
> textContent.length
7

এটি আমাকে সেই স্ট্রিংয়ে কী আছে তা দেখতে চাইলে প্ররোচিত করেছিল।

> encodeURI(textContent)
"%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B"

বাইটের এই অনুক্রমটি ইউনিকোডের কয়েকটি অক্ষরের পরিবারে মনে হয় যা ওয়ার্ড প্রসেসর দ্বারা নথিতে সন্নিবেশিত হয়, এবং তারপরে ডেটা ক্ষেত্রগুলিতে তাদের পথ সন্ধান করে। সর্বাধিক সাধারণত, এই চিহ্নগুলি একটি নথির শেষে ঘটে occur শূন্য-প্রস্থের স্থানটি "%E2%80%8B"সিকে-সম্পাদক (সিকেইডিটার) দ্বারা .োকানো হতে পারে।

encodeURI()  UTF-8     Unicode  html     Meaning
-----------  --------  -------  -------  -------------------
"%E2%80%8B"  EC 80 8B  U 200B   ​  zero-width-space
"%E2%80%8E"  EC 80 8E  U 200E   ‎  left-to-right-mark
"%E2%80%8F"  EC 80 8F  U 200F   ‏  right-to-left-mark

সে সম্পর্কে কিছু উল্লেখ:

http://www.fileformat.info/info/unicode/char/200B/index.htm

https://en.wikedia.org/wiki/Left-to-right_mark

মনে রাখবেন যে এমবেড করা অক্ষরের এনকোডিংটি ইউটিএফ -8 হলেও, নিয়মিত এক্সপ্রেশনটিতে এনকোডিং হয় না। যদিও চরিত্রটি ইউটিএফ -8 এর তিনটি বাইট (আমার ক্ষেত্রে) হিসাবে স্ট্রিংটিতে এম্বেড করা হয়েছে, নিয়মিত অভিব্যক্তির নির্দেশাবলী অবশ্যই দ্বি-বাইট ইউনিকোড ব্যবহার করবে। আসলে, ইউটিএফ -8 চার বাইট পর্যন্ত দীর্ঘ হতে পারে; এটি ইউনিকোডের তুলনায় কম কমপ্যাক্ট কারণ এটি স্ট্যান্ডার্ড এসকিআই এনকোডিং থেকে বাঁচতে হাই বিট (বা বিট) ব্যবহার করে। এটি এখানে ব্যাখ্যা করা হয়েছে:

https://en.wikedia.org/wiki/UTF-8


4
textContent = textContent.replace(/[\u{0080}-\u{FFFF}]/gu,"");আইই (কমপক্ষে IE 11) এ কাজ করে না। এটি ত্রুটির সাথে ব্যর্থ হয়: স্ক্রিপ্ট 5021 : চরিত্রের সেটটিতে অবৈধ পরিসীমা
অ্যান্ড্রে সরিচ

14

আপনি নন-এএসসিআইআই অক্ষরগুলি প্রতিস্থাপন করতে নীচের রেজেক্স ব্যবহার করতে পারেন

str = str.replace(/[^A-Za-z 0-9 \.,\?""!@#\$%\^&\*\(\)-_=\+;:<>\/\\\|\}\{\[\]`~]*/g, '')

তবে মনে রাখবেন যে স্পেস, কলোন এবং কমাগুলি সমস্ত বৈধ ASCII, সুতরাং ফলাফল হবে

> str
"INFO] :, , ,  (Higashikurume)"

আমি রেজেক্সের সাথে দুর্দান্ত নই তবে জানি .রেপ্লেস () পদ্ধতিটি আপনি যে জিনিসটি প্রতিস্থাপন করতে চান সেটি গ্রহণ করে এবং 2 প্যারামিটারের পরিবর্তে .replace ('এই পাঠ্যটি প্রতিস্থাপন করুন', 'এই পাঠ্যটি প্রতিস্থাপন করুন') like সুতরাং এর কোন অংশটি বিপরীতমুখী করে এবং এসকি চরিত্রগুলি ছেড়ে অন্যকে সরিয়ে দেয়। ধন্যবাদ
নিকোম

4
@ নিকোম অক্ষরগুলির []অর্থ কোনও চরিত্রের অর্থ কিন্তু [^]এর বিপরীতে - কোনও অক্ষরটি ব্র্যাকেটে নয়।
জাফি

11

এইগুলির কোনও উত্তর সঠিকভাবে ট্যাবগুলি, নিউলাইনগুলি, ক্যারেজ রিটার্নগুলি হ্যান্ডেল করে না এবং কিছু বর্ধিত ASCII এবং ইউনিকোড পরিচালনা করে না। এটি ট্যাব এবং নিউলাইনগুলি কেপ করবে, তবে নিয়ন্ত্রণের অক্ষর এবং এএসসিআইআই সেট থেকে বাইরে থাকা কোনও কিছুই সরিয়ে ফেলবে। পরীক্ষা করতে "এই কোড স্নিপেট চালান" বোতামটি ক্লিক করুন। পাইপে নীচে নেমে আসা কিছু নতুন জাভাস্ক্রিপ্ট রয়েছে তাই ভবিষ্যতে (2020+?) আপনাকে করতে হতে পারে \u{FFFFF}তবে এখনও হয়নি

console.log("line 1\nline2 \n\ttabbed\nF̸̡̢͓̳̜̪̟̳̠̻̖͐̂̍̅̔̂͋͂͐l̸̢̹̣̤̙͚̱͓̖̹̻̣͇͗͂̃̈͝a̸̢̡̬͕͕̰̖͍̮̪̬̍̏̎̕͘ͅv̸̢̛̠̟̄̿i̵̮͌̑ǫ̶̖͓͎̝͈̰̹̫͚͓̠̜̓̈́̇̆̑͜ͅ".replace(/[\x00-\x08\x0E-\x1F\x7F-\uFFFF]/g, ''))


এটি একটি ভাল রেইগেক্স তবে এটি উচ্চারণ এবং ইমোজিসগুলিও সরিয়ে দেয়। আমি নিশ্চিত না কীভাবে এই কেসগুলি কভার করতে এই রেজেক্সটি উন্নত করা যায়।
জুলিও বেদোভাত্তো

বেস 64 এ রূপান্তর করার সময় কৌণিক উইন্ডো.এটব এবং ডিওএমএসাইটিজার.বিপাসসিকিউরিটি ... অবৈধ অক্ষরগুলি (এটি% 80, \ ইউএফএফএফএফ বা অব্যক্ত শ্বেত স্পেসগুলি) অপসারণের সম্ভাব্য সমাধানের সন্ধানকারী যে কোনও ব্যক্তির জন্য, এটি একটি কার্যকরী সমাধান
বি লেওন

10

উচ্চারণ সহ এএসসিআইআই ব্যবহার করতে:

var str = str.replace(/[^\x00-\xFF]/g, "");

উজ্জ্বল! 127 এর উপরে এসকি মানগুলি পরিচালনা করে যা অন্য উত্তরগুলি ফেলে দেয়।
ব্যবহারকারী 3413723

উচ্চারণ সহ Alt পাঠ্য সম্পর্কে কীভাবে ... যেমন altcodeunicode.com/alt-codes-letter-e-with-accents ?
স্ট্যাকডআপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.