স্ট্রিং থেকে বর্ণানুক্রমিক অক্ষরগুলি সরান


224

আমি নিম্নলিখিত স্ট্রিং সরবরাহিত আউটপুট রূপান্তর করতে চান।

Input:  "\\test\red\bob\fred\new"
Output: "testredbobfrednew"

আমি কোনো সমাধান যে মত বিশেষ অক্ষর হ্যান্ডেল না পাওয়া করেছি \r, \n, \b, ইত্যাদি

মূলত আমি এমন কোনও কিছু থেকে মুক্তি পেতে চাই যা অক্ষর নয়। এখানে আমি চেষ্টা করেছি ...

Attempt 1: "\\test\red\bob\fred\new".replace(/[_\W]+/g, "");
Output 1:  "testedobredew"

Attempt 2: "\\test\red\bob\fred\new".replace(/['`~!@#$%^&*()_|+-=?;:'",.<>\{\}\[\]\\\/]/gi, "");
Output 2:  "testedobred [newline] ew"

Attempt 3: "\\test\red\bob\fred\new".replace(/[^a-zA-Z0-9]/, "");
Output 3:  "testedobred [newline] ew"

Attempt 4: "\\test\red\bob\fred\new".replace(/[^a-z0-9\s]/gi, '');
Output 4:  "testedobred [newline] ew"

একাধিক পদক্ষেপ সহ অন্য একটি প্রচেষ্টা

function cleanID(id) {
    id = id.toUpperCase();
    id = id.replace( /\t/ , "T");
    id = id.replace( /\n/ , "N");
    id = id.replace( /\r/ , "R");
    id = id.replace( /\b/ , "B");
    id = id.replace( /\f/ , "F");
    return id.replace( /[^a-zA-Z0-9]/ , "");
}

ফলাফল সহ

Attempt 1: cleanID("\\test\red\bob\fred\new");
Output 1: "BTESTREDOBFREDNEW"

কোন সাহায্য প্রশংসা করা হবে।

কার্যক্ষম সমাধান:

Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , '');
Output 1: "testredbobfrednew"

মজাদার প্রশ্ন, in n মধ্যে clearly নতুন স্পষ্টত এটি কী ট্রিপ করছে। আমি কীভাবে এটি সন্ধান করতে এবং প্রতিস্থাপন করব তা পুরোপুরি নিশ্চিত নই যদিও হোয়াইটস্পেটের বিশেষ অক্ষরে রেগেক্সের সন্ধান চলছে
উইল বাক

1
ইনপুটগুলি পালানো হয়েছে / কীভাবে তাদের বরাদ্দ করা হয়? var Input = "\\test\red\bob\fred\new"এই স্ট্রিংটিতে "লাল" নেই তাই আপনার প্রথম প্রচেষ্টা সঠিক, আপনি কি লিটারের বিরুদ্ধে পরীক্ষা করছেন "\\\\test\\red\\bob\\fred\\new"?
অ্যালেক্স কে।

/[^\w\s]+/giএটা চেষ্টা কর.
বার্তোস্ গ্রিজিবোস্কি

আমার মনে হয় প্রশ্নটি হল, আপনার ইনপুট স্ট্রিংয়ের ব্যাকস্ল্যাশগুলি কি বিশেষ চরিত্রের প্রতিনিধিত্ব করে? (আপনার উদাহরণের ভিত্তিতে, আমি অনুমান করছি না))
ডেভ

ডাবল উদ্ধৃতি থেকে একক উদ্ধৃতিতে স্যুইচ করার চেষ্টা করেছেন?
OptimusCrime

উত্তর:


467

অ-অক্ষরীয় অক্ষর মুছে ফেলা হচ্ছে

নিম্নলিখিত / ইনপুট স্ট্রিং থেকে অ-অক্ষরীয় অক্ষরগুলি ছাঁটাই করার জন্য একটি সঠিক রেজেক্স রয়েছে:

input.replace(/\W/g, '')

নোটটি এটির \Wসমতুল্য [^0-9a-zA-Z_]- এতে আন্ডারস্কোর অক্ষর অন্তর্ভুক্ত রয়েছে। আন্ডারস্কোরগুলি অপসারণ করতে যেমন:

input.replace(/[^0-9a-z]/gi, '')

ইনপুটটি ত্রুটিযুক্ত

যেহেতু পরীক্ষার স্ট্রিংয়ে বিভিন্ন পালানো অক্ষর রয়েছে, যা বর্ণমালা নয়, এটি সেগুলি সরিয়ে ফেলবে।

যদি আক্ষরিকভাবে নেওয়া হয় তবে স্ট্রিংয়ের একটি ব্যাকস্ল্যাশ এড়াতে হবে:

"\\test\\red\\bob\\fred\\new".replace(/\W/g, '')
"testredbobfrednew" // output

ত্রুটিযুক্ত স্ট্রিং পরিচালনা করছে

আপনি যদি ইনপুট স্ট্রিংটি সঠিকভাবে এড়াতে সক্ষম না হন (তবে কেন?), বা এটি একরকম অবিশ্বস্ত / ভুল কনফিগার্ড উত্স থেকে এসেছে - আপনি এই জাতীয় কিছু করতে পারেন:

JSON.stringify("\\test\red\bob\fred\new").replace(/\W/g, '')
"testredbobfrednew" // output

নোট করুন যে স্ট্রিংয়ের জেসন উপস্থাপনার সাথে উদ্ধৃতিগুলি অন্তর্ভুক্ত রয়েছে:

JSON.stringify("\\test\red\bob\fred\new")
""\\test\red\bob\fred\new""

তবে সেগুলি প্রতিস্থাপন রেজেক্স দ্বারা সরানো হয়।


10
এটি আন্ডারস্কোরগুলি সরিয়ে দেয় না।
কাইলেক্স

4
@ কাইলেক্স, এটি কারণ যে আন্ডারস্কোরগুলি কোনও কারণে বর্ণানুক্রমিক গোষ্ঠীর একটি অংশ হিসাবে বিবেচিত হয়
ইউজিন কুজমেনকো

12
"কারণ এগুলি পরিবর্তনশীল শনাক্তকারীদের সাধারণত আইনী অক্ষর are" । প্রশ্নের কোনও "_" নেই, অবশ্যই (যা প্রশ্নটিতে ব্যবহৃত হয়) বা এর \Wসাথে প্রতিস্থাপন [_\W]করলে আন্ডারস্কোরগুলি মুছে ফেলা হবে।
AD7six

1
@ এডি 7 সিক্স, আপনি কী দয়া করে JSON.stringify () স্ট্রিং যখন অবিশ্বস্ত উত্স থেকে আসছেন তখন কেন ব্যবহার করা উচিত তা বিস্তারিতভাবে বর্ণনা করতে পারেন? এটি না করার জন্য কি কোনও সুরক্ষা উদ্বেগ রয়েছে? ধন্যবাদ!
jbmusso

1
@ গিথর এটি "একজনের উচিত" নয়, বা এটি সুরক্ষাকে একেবারে প্রভাবিত করে; যদি "কিছু স্ট্রিং" পাওয়া যায় এবং যে কারণেই এটি মূলত বিরক্ত থাকে (স্ট্রিংটি কেন বিকৃত হয় এমন প্রশ্ন থেকে স্পষ্ট নয়) - এটি স্ট্রিংটি এটির জন্য দেখতে দেয়: jsfiddle.net/Z6N7C
AD7six

49

বর্তমানের সমস্ত উত্তরগুলিতে এখনও উদ্বেগ রয়েছে, আমি যে সবচেয়ে ভাল জিনিসটি সামনে আসতে পেরেছি তা হ'ল:

string.replace(/[^A-Za-z0-9]/g, '');

এখানে একটি উদাহরণ যা কীবোর্ডে আমি খুঁজে পেতাম এমন প্রতিটি কী ক্যাপচার করে:

var string = '123abcABC-_*(!@#$%^&*()_-={}[]:\"<>,.?/~`';
var stripped = string.replace(/[^A-Za-z0-9]/g, '');
console.log(stripped);

ফলাফল: '123abcABC'


1
input.replace(/\W/g, '')_একটি স্ট্রিং মধ্যে ছেড়ে । @ ডেমিনিটিक्स আরও string.replace(/[^A-Za-z0-9]/g, '');ভাল কাজ করে কারণ এটি স্ট্রিং থেকে সমস্ত অ-অক্ষর অক্ষর মুছে ফেলে।
টিম

1
এবং তবুও, এই উত্তরের কোনও ক্রম ছাড়াই আসলে জিজ্ঞাসিত প্রশ্নের উত্তর দেয়
AD7six

10

সমস্যাটি কীভাবে আপনি অক্ষরগুলি প্রতিস্থাপন করেন তা নয়, আপনি কীভাবে স্ট্রিংটি ইনপুট করেন তা নিয়ে সমস্যা।

এটা শুধুমাত্র ইনপুট করে একটি ব্যাকস্ল্যাশ চরিত্র প্রথম ব্যাকস্ল্যাশ আছে, অন্যদের নিয়ন্ত্রণ অক্ষর অংশ \r, \b, \fএবং \n

যেহেতু এই ব্যাকস্ল্যাশগুলি পৃথক অক্ষর নয়, তবে একটি একক নিয়ন্ত্রণের অক্ষর লেখার জন্য স্বরলিপিটির অংশ, সেগুলি পৃথকভাবে মুছে ফেলা যায় না। \nযেমন আপনি দুটি পৃথক অক্ষর নয় বলে আপনি ব্যাকস্ল্যাশটি সরাতে পারবেন না , আপনি নিয়ন্ত্রণ অক্ষর LFবা লাইন ফিডটি লেখার উপায় এটি ।

যদি আপনি সেই ইনপুটটিকে একুটি পছন্দসই আউটপুটে রূপান্তর করতে চান তবে আপনার প্রতিটি অক্ষরকে সংশ্লিষ্ট বর্ণের সাথে প্রতিস্থাপন করতে হবে, উদাহরণস্বরূপ অক্ষরটি অক্ষরের \nসাথে প্রতিস্থাপন করুন n

একটি নিয়ন্ত্রণ অক্ষর প্রতিস্থাপন করতে আপনার মত একটি অক্ষর সেট ব্যবহার করা দরকার [\r], যেমন \rনিয়মিত অভিব্যক্তির একটি বিশেষ অর্থ রয়েছে:

var input = "\\test\red\bob\fred\new";

var output = input
    .replace(/[\r]/g, 'r')
    .replace(/[\b]/g, 'b')
    .replace(/[\f]/g, 'f')
    .replace(/[\n]/g, 'n')
    .replace(/\\/g, '');

ডেমো: http://jsfiddle.net/SAp4W/


আপনি যা বলছেন তা আমি বুঝতে পেরেছি তবে প্রশ্নটি এখনও দাঁড়িয়ে আছে এবং এখনও কেউ সঠিক উত্তরটির পরামর্শ দেয়নি। ইনপুট পরিবর্তন হতে পারে তবে প্রোগ্রামটিতে এটি জেএস-এ কীভাবে পরিবর্তন করা যায় সে সম্পর্কে কারও কোনও উত্তর প্রস্তাব দেওয়া হয়নি।
ববি ক্যানন

2
@ ববিক্যানন: আমি এমন কোড যুক্ত করেছি যা আপনার সঠিক ইনপুট নেয় এবং পছন্দসই আউটপুট তৈরি করে।
গুফা

5

আপনি এই রেজেক্স চেষ্টা করতে পারেন:

value.replace(/[\W_-]/g, '');

প্রশ্ন অনুসারে: আমি কেবল এমন কোনও কিছু থেকে মুক্তি পেতে চাই যা অক্ষরযুক্ত নয়। আপনি কি আউটপুট আশা করছিলেন?
মাইক্রুটিও

0

এটি সমস্ত অ-অক্ষরীয় অক্ষর সরিয়ে দেয়, মূলধন সংরক্ষণ করে এবং শব্দের মধ্যে ফাঁকা স্থান সংরক্ষণ করে।

function alpha_numeric_filter (string) {

  const alpha_numeric = Array.from('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' + ' ')

  const json_string = JSON.stringify(string)

  let filterd_string = ''

  for (let i = 0; i < json_string.length; i++) {

    let char = json_string[i]
    let index = alpha_numeric.indexOf(char)
    if (index > -1) {
      filterd_string += alpha_numeric[index]
    }

  }

  return filterd_string

}

const input = "\\test\red\bob\fred\new"
console.log(alpha_numeric_filter(input)) //=> testredbobfrednew

const complex_string = "/_&_This!&!! is!@#$% a%^&*() Sentence+=-[]{} 123:;\|\\]||~`/.,><"
console.log(alpha_numeric_filter(complex_string)) //=> This is a Sentence 123

এটি কার্যকর হয় না (দয়া করে প্রশ্নটি পড়ুন) - এটি জিনিসগুলি করার একটি বরং জটিল পদ্ধতি।
AD7six

1
@ AD7six আমার ত্রুটিটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ। আমি যখন ওয়েবস্ট্রোমে ইনপুটটি অনুলিপি করেছি তখন এটি প্রতিটি বিদ্যমান ব্যাকস্ল্যাশটিতে স্বয়ংক্রিয়ভাবে 2 টি অতিরিক্ত ব্যাকস্ল্যাশ যুক্ত করে। আমি এই noitice ব্যর্থ। ইনপুট = "\\ পরীক্ষা \ লাল \ বব \ ফ্রেড \ নতুন" -> অনুলিপি_পাস্তে = "\\\\ পরীক্ষা \\ লাল \\ বোব \\ ফ্রেড \\ নতুন"।
ফ্ল্যাভিও

-1

এখানে একটি উদাহরণ যা আপনি ব্যবহার করতে পারেন,

function removeNonAplhaNumeric(str){
    return str.replace(/[\W_]/g,"");
}

removeNonAplhaNumeric("0_0 (: /-\ :) 0-0");

-3

আপনি যদি এই \\test\red\bob\fred\newস্ট্রিংটি রাখতে চান তবে আপনার সমস্ত ব্যাকস্ল্যাশগুলি ( \) এড়ানো উচিত । আপনি যখন লিখবেন \\test\\red\\bob\\fred\\newআপনার স্ট্রিংটিতে আসলে একক ব্যাকস্ল্যাশ রয়েছে। আপনার স্ট্রিংটি মুদ্রণের বিষয়ে আপনি নিশ্চিত থাকতে পারেন।
সুতরাং যদি আপনার স্ট্রিংয়ের ব্যাকস্ল্যাশগুলি এড়িয়ে যায় myString.replace(/\W/g,'')তবে স্বাভাবিকভাবে কাজ করবে।


1
যদি আপনি "আপনার সমস্ত ব্যাকস্ল্যাশগুলি () এড়িয়ে চলা উচিত" পরামর্শ দিতে চান তবে আপনাকে কীভাবে এটি করতে হবে তার একটি উদাহরণ প্রদান করা দরকার।
ববি ক্যানন

ডাবল ব্যাকস্ল্যাশ কি জিনিস আপনি ??? এবং আমি কী বলতে চাইছি "যখন আপনি \\ পরীক্ষা \\ red \\ bob \\ fred write লিখেন তখন আপনার স্ট্রিংয়ে আসলে একক ব্যাকস্ল্যাশ রয়েছে" " ??? এটি কি ব্যাখ্যা দিচ্ছে না?
shift66

ইনপুটটি "\\ টেস্ট \ red \ bod \ ফ্রেড \ নতুন" এবং পরিবর্তন করতে পারে না। আমার ইনপুট স্ট্রিংয়ের জন্য একটি সমাধান দরকার। আপনি কীভাবে "ব্যাকস্ল্যাশগুলি ছাড়াই" তা যদি আমাকে দেখাতে চান তবে একটি উদাহরণ দিন। আমরা ইনপুট পরিবর্তন করতে পারি না। গৃহীত উত্তর দেখুন। সমাধানটি ইনপুটটির পরিবর্তন না হওয়ার জন্য অনুমতি দেয় তবে পছন্দসই আউটপুট দেয়।
ববি ক্যানন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.