RegExp সহ সমস্ত বিশেষ অক্ষর মুছে ফেলুন


234

আমি একটি RegExp চাই যা একটি স্ট্রিং থেকে সমস্ত বিশেষ অক্ষর মুছে ফেলবে will আমি এই জাতীয় কিছু চেষ্টা করছি তবে এটি আই 7 তে কাজ করে না, যদিও এটি ফায়ারফক্সে কাজ করে।

var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,.";

for (var i = 0; i < specialChars.length; i++) {
  stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}

RegExp এর একটি বিশদ বিবরণ পাশাপাশি সহায়ক হবে।


18
এর মতো কিছু একটি কালো তালিকা নয়, একটি সাদা তালিকা হিসাবে ভাল off \ গুলি | [0-9] | তারপর আপনি মাত্র [AZ] যেত না
উল্লুক-inago

কোন স্ক্রিপ্ট ত্রুটি? আপনি ডিবাগ করেছেন? অথবা অন্যথায় চেষ্টা করুন ... জাভাস্ক্রিপ্ট কোডে ব্লক ধরুন।
কাংকান

@ এপি-ইনাগো আপনি আমাকে আরও একটু রেজিপেক্স ব্যাখ্যা করতে পারেন দয়া করে
তীমথিয় রুহলে

3
"বিশেষ চরিত্র" সংজ্ঞায়িত করুন! "風" আপনার জন্য বিশেষ? (এই
ভেবে

7
আমি মনে করি না যে এখানে কারও অর্থ কোনও অপরাধ ছিল। আমি ব্ল্যাকলিস্ট হিসাবে এটি করার আগে জ্বলে উঠেছি যেহেতু সর্বদা সেই "ছোট্ট" ছোট্ট থাকে যা শেষ হয়ে যায় (প্রতারণার উদাহরণগুলির মতো)। আপনি কেন এটি করার চেষ্টা করছেন তা সম্পর্কে অবশেষে সঠিক পন্থাটি।
এপি-ইনাগো

উত্তর:


612
var desired = stringToReplace.replace(/[^\w\s]/gi, '')

মন্তব্যগুলিতে যেমন উল্লেখ করা হয়েছিল যে একটি শ্বেত তালিকা হিসাবে এটি করা সহজ - যে অক্ষরগুলি নয় তা প্রতিস্থাপন করুন আপনার safelist হবে।

ক্যারেট ( ^) অক্ষর সেট অস্বীকৃতি হয় [...], giবলতে বিশ্বব্যাপী এবং কেস-অবশ (পরেরটির একটি বিট অপ্রয়োজনীয় কিন্তু আমি এটা উল্লেখ করতে চেয়েছিলেন) এবং এই উদাহরণে safelist সংখ্যা, শব্দ অক্ষর, আন্ডারস্কোর (হয় \w) এবং হোয়াইটস্পেস ( \s)।


50
এই দ্রষ্টব্যটি অ ইংরেজী চিহ্নগুলির জন্য কাজ করে না। উদাহরণস্বরূপ "Їжак"।
সিগল

4
আপনি pp \ w এর পরিবর্তে বড় হাতের \ W ব্যবহার করতে পারেন। \ ডাব্লু: কোনও শব্দহীন চরিত্রের সাথে মেলে। [^ এ-জা-জেড0-9_] এর সমান। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

@ সিগল আমি একটি উত্তর যুক্ত করেছি যা ইউনিকোডগুলি পরিচালনা করে।
ফ্রিদেব

1
পর্তুগিজ ভাষার মতো অ্যাকসেন্ট শব্দের গ্রহণ করতে, এটি করুন: স্ট্রিংটোরেপ্লেস.রেপ্লেস (/ [^ এ-জেড-ú] s] /
জিআই

1
বেশিরভাগ ইউরোপীয় ভাষা যুক্ত করতে (নরওয়েজিয়ান, সুইডিশ, জার্মান, পর্তুগিজ, স্পেনীয়) স্ট্রিংটোরেপ্লেস.রেপ্লেস (/ [^ \ \ w \ s \ xc0-xff] / gi, '')। অন্যান্য ভাষা অন্তর্ভুক্ত করতে ইউনিকোড ব্যাপ্তি ব্যবহার করা যেতে পারে। দেখুন: stackoverflow.com/questions/150033/...
Eskil Mjelva Saatvedt

105

মনে রাখবেন যে আপনি যদি এখনও সেটগুলি বাদ দিতে চান তবে স্ল্যাশ এবং বিশেষ অক্ষরগুলির মতো জিনিসগুলি সহ আপনি নিম্নলিখিতটি করতে পারেন:

var outString = sourceString.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');

বিশেষ দ্রষ্টব্য রাখুন যে "বিয়োগ" চরিত্রটি অন্তর্ভুক্ত করার জন্য আপনাকে পরবর্তী দলের মতো ব্যাকস্ল্যাশ দিয়ে এড়াতে হবে। যদি আপনি এটি না করেন তবে 0-9 নির্বাচন করবেন যা সম্ভবত অনাকাঙ্ক্ষিত।


10
চমৎকার সমাধান! গৃহীত উত্তরটি কেবল ইংরেজিতেই কাজ করে, এটি যে কোনও ভাষায় কাজ করে (যতদূর আমি পরীক্ষা করে দেখেছি)। ধন্যবাদ :)
রোনেন নেস

1
@ কুনটোল সামনের দিকের ?অক্ষর সেট অংশটি থেকে সরান । এটি আপনি মুছে ফেলতে চান এমন অক্ষরগুলি তালিকাভুক্ত করে, তাই এটিকে ছিনিয়ে নেওয়া থেকে বাদ দেওয়া অন্তর্ভুক্তভাবে চূড়ান্ত ফলাফলের মধ্যে অন্তর্ভুক্ত করবে।
নাইনপুট

এটি দুর্দান্ত কাজ করে, যে কোনও ভাষার জন্য পুরোপুরি ফিট করে, কেবল যে চরটি আপনি প্রতিস্থাপন করতে চান তা যুক্ত করতে হবে এবং এটিই সব কিছু। ধন্যবাদ।
এলরোস রোমিও

21

সরল জাভাস্ক্রিপ্ট রেজেক্স ইউনিকোড অক্ষর পরিচালনা করে না

ব্যবহার করবেন না [^\w\s], এটি অ্যাকসেন্ট সহ চিঠিগুলি সরিয়ে দেবে (যেমন àèéìòù), সিরিলিক বা চীনাকে উল্লেখ না করে , এই জাতীয় ভাষা থেকে আসা চিঠিগুলি মুছে ফেলা হবে।

আপনি সমস্ত বিশেষ অক্ষরের সাথে এই অক্ষরগুলি সত্যিই মুছে ফেলতে চান না। আপনার দুটি সম্ভাবনা রয়েছে:

  • আপনার রিজেজেলে সমস্ত বিশেষ অক্ষর যুক্ত করুন যা আপনি মুছতে চান না,
    উদাহরণস্বরূপ:[^èéòàùì\w\s]
  • Xregexp.com এ দেখুন । এক্সরেগএক্সপ \p{...}সিনট্যাক্সের মাধ্যমে ইউনিকোডের মিলের জন্য বেস সমর্থন যোগ করে ।

var str = "Їжак::: résd,$%& adùf"
var search = XRegExp('([^?<first>\\pL ]+)');
var res = XRegExp.replace(str, search, '',"all");

console.log(res); // returns "Їжак::: resd,adf"
console.log(str.replace(/[^\w\s]/gi, '') ); // returns " rsd adf"
console.log(str.replace(/[^\wèéòàùì\s]/gi, '') ); // returns " résd adùf"
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.js"></script>


3
আন্তর্জাতিকীকরণের জন্য জেনে রাখা ভাল, আমার কোনও ধারণা ছিল না জেএস রেজেক্সটি ইউটিএফ -8 মানসিক নয়।
লেসকিউসার

আপনি সমস্ত বৈধ ইউটিএফ -8 অক্ষরগুলিকে ভার স্ট্রিতে রাখতে পারবেন না
সিগল

@ সিগুল হ্যাঁ, তবে আপনি যদি বিশ্বব্যাপী সামঞ্জস্যপূর্ণ অ্যাপ্লিকেশনটি না লিখে থাকেন তবে আপনি ব্যবহারিকভাবে আপনার বর্তমান স্থানীয়করণের জন্য কেবল বৈধ ইউটিএফ -8 অক্ষরের তালিকা রাখতে পারেন। আমার ক্ষেত্রে, ইতালীয় ভাষার জন্য কেবলমাত্র কয়েকটি অক্ষর রয়েছে।
ফ্রিদেব

7

প্রথম সমাধানটি কোনও ইউটিএফ -8 বর্ণমালার জন্য কাজ করে না। (এটি Їжак এর মতো পাঠ্য কেটে দেবে)। আমি এমন একটি ফাংশন তৈরি করতে পরিচালিত করেছি যা RegExp ব্যবহার করে না এবং জাভাস্ক্রিপ্ট ইঞ্জিনে ভাল ইউটিএফ -8 সমর্থন ব্যবহার করে। ধারণাটি সহজ যদি একটি চিহ্ন বড় হাতের এবং ছোট হাতের ক্ষেত্রে এটি একটি বিশেষ চরিত্রের সমান হয়। একমাত্র ব্যতিক্রম সাদা স্থানের জন্য তৈরি।

function removeSpecials(str) {
    var lower = str.toLowerCase();
    var upper = str.toUpperCase();

    var res = "";
    for(var i=0; i<lower.length; ++i) {
        if(lower[i] != upper[i] || lower[i].trim() === '')
            res += str[i];
    }
    return res;
}

আপডেট: দয়া করে নোট করুন, এই সমাধানটি কেবলমাত্র সেই ভাষাগুলির জন্যই কাজ করে যেখানে ছোট এবং বড় অক্ষর রয়েছে। চাইনিজের মতো ভাষায়, এটি কার্যকর হবে না।

আপডেট 2: আমি যখন অস্পষ্ট অনুসন্ধানে কাজ করছিলাম তখন আমি আসল সমাধানে এসেছি। আপনি যদি অনুসন্ধানের কার্যকারিতা বাস্তবায়নের জন্য বিশেষ অক্ষরগুলি সরিয়ে দেওয়ার চেষ্টা করেন তবে আরও ভাল পদ্ধতির উপায় থাকতে পারে। ব্যবহারের লিপ্যন্তর গ্রন্থাগার যা আপনি শুধুমাত্র ল্যাটিন অক্ষর থেকে STRING উত্পাদন করা হবে এবং তারপর সহজ RegExp বিশেষ অক্ষর মুছে ফেলার সব জাদু করতে হবে। (এটি চীনা পক্ষেও কাজ করবে এবং আপনি Tromsø== তৈরি করেও পার্শ্ব সুবিধা পাবেন Tromso)।


দুর্দান্ত, এই উত্তর মত! আমি এটি একটি বৈধ ফাইলনাম তৈরি করার জন্য ব্যবহার করি এবং এটি ফাঁকা (লিনাক্স / ইউনিক্স সামঞ্জস্যপূর্ণ) অপসারণ এবং পাশাপাশি সংখ্যার অনুমতি দেওয়ার জন্য আপনার সমাধানটি প্রসারিত করে। সুতরাং আমি প্রবৃত্তিকে প্রসারিত করেছি (jQuery জড়িত): যদি (str [i]! == '' && (নিম্ন [i]! = উপরের [i] || নিম্ন [i]। ত্রিম () === '' | | $ .isNumeric (str [i]))
জনি

অনেক ভাষায় কোনও বড় হাতের অক্ষর নেই ... সুতরাং ফাংশনটি বৈধ
ইনপুটটিকে

চাইনিজ চরিত্রগুলি এর একটি উদাহরণ যা এর দ্বারা ছিটকে যায়
লেহেক

আমি যখন এই সমাধানটি তৈরি করেছি, দুর্ভাগ্যক্রমে, আমি চাইনিজ ভাষা নিয়ে ভাবছিলাম না। পূর্ববর্তী উত্তরগুলিও কার্যকর হবে না বলে সমাধানটি প্রস্তাব করতে হবে।
সিগল

1

আমি আমার রেজেক্সগুলি ডিবাগিংয়ের জন্য রেইগেক্সবাডি ব্যবহার করি এটিতে প্রায় সমস্ত ভাষা খুব দরকারী। লক্ষ্যযুক্ত ভাষার জন্য অনুলিপি / পেস্ট করা ছাড়া ভয়ঙ্কর সরঞ্জাম এবং খুব ব্যয়বহুল নয়।

সুতরাং আমি আপনার রেজেক্স অনুলিপি / আটকানো হয়েছে এবং আপনার সমস্যাটি হ'ল রেগেক্সের [,] বিশেষ অক্ষর, সুতরাং আপনাকে এড়াতে হবে। সুতরাং রেজেক্সটি হ'ল: /!@#$^&%*())+-sel\x5B\x5D


0

আপনি কেন এমন কিছু করবেন না:

re = /^[a-z0-9 ]$/i;
var isValid = re.test(yourInput);

আপনার ইনপুটটিতে কোনও বিশেষ চর রয়েছে কিনা তা পরীক্ষা করতে


17
ওপিতে বলা হয়েছে যে তিনি বিশেষ চরিত্রগুলি বিদ্যমান কিনা তা দেখার জন্য তিনি মুছে ফেলার চেষ্টা করছেন।
অনাকাটা

এটি ভাল সমাধানের মধ্যে একটি তবে এটি কেবলমাত্র ইংরেজী বর্ণমালার বর্ণ সংখ্যা এবং স্থানকে অনুমতি দেয় তবে এটি এর মতো অক্ষরগুলি সরিয়ে ফেলবে èéòàùìএবং কিছু ক্ষেত্রে এটি সমাধান হবে না
ম্যাপমালিথ

0

str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")আমি এই মত sth করেছি। তবে এমন কিছু লোক আছেন যারা এটিকে আরও সহজ করে দিয়েছিলেনstr.replace(/\W_/g,"");


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