উত্তর:
আপনি ইতিমধ্যে কী করতে চেয়েছিলেন এমন আপনার মতামত প্রায় জেনে গেছে, আপনি মূলত এটিকে একটি রেজেক্স হিসাবে সংজ্ঞায়িত করেছেন।
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace('/[^A-Za-z0-9 ]/', '', $string);
ইউনিকোড অক্ষরের জন্য, এটি হ'ল:
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
\w
অন্তর্ভুক্ত \d
এবং তাই \d
অপ্রয়োজনীয়। এছাড়াও, এটি ভুল কারণ এটি ফলাফলের স্ট্রিংয়ের (যা এতে অন্তর্ভুক্ত রয়েছে \w
) আন্ডারস্কোরগুলি ছেড়ে দেয় ।
i
থেকে পতাকাটি এখানে কি সত্যিই প্রয়োজনীয় [:alnum:]
?
নিয়মিত প্রকাশ আপনার উত্তর।
$str = preg_replace('/[^a-z\d ]/i', '', $str);
i
জন্য দাঁড়িয়েছে।^
মানে, দিয়ে শুরু হয় না। \d
কোনও অঙ্কের সাথে মেলে। a-z
a
এবং এর মধ্যে সমস্ত অক্ষরের সাথে মেলে z
। i
প্যারামিটারের কারণে আপনাকে নির্দিষ্ট করতে হবে না a-z
এবং A-Z
।\d
কোনও স্থান থাকার পরে , এই রেজেজেটে ফাঁকা স্থান অনুমোদিত।এখানে এর জন্য একটি খুব সহজ রেগেক্স রয়েছে:
\W|_
এবং আপনার প্রয়োজন হিসাবে ব্যবহৃত (একটি ফরোয়ার্ড /
স্ল্যাশ ডিলিমিটার সহ)।
preg_replace("/\W|_/", '', $string);
এই দুর্দান্ত সরঞ্জামটি দিয়ে এখানে এটি পরীক্ষা করুন যা রেজেক্স কী করছে তা ব্যাখ্যা করে:
/u
পতাকা লাগবে অন্যথায় অ-অসি চিঠিগুলিও সরানো হয়েছে।
[\W_]+
আপনার যদি টিপিক্যাল এজেডের পরিবর্তে অন্যান্য ভাষাগুলি সমর্থন করার প্রয়োজন হয় তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:
preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
[^\p{L}\p{N} ]
একটি অবহেলিত (এটি একটি চরিত্রের সাথে মিলবে যা সংজ্ঞায়িত নয় ) সংজ্ঞা দেয়:
\p{L}
: যে কোনও ভাষা থেকে একটি চিঠি ।\p{N}
: যে কোনও স্ক্রিপ্টের একটি সংখ্যার চরিত্র ।
: একটি স্থানের অক্ষর।+
লোভজনকভাবে 1 এবং সীমাহীন সময়ের মধ্যে অক্ষর শ্রেণীর সাথে মেলে ।এটি অন্যান্য ভাষা এবং স্ক্রিপ্টগুলির পাশাপাশি এজেডের চিঠি এবং সংখ্যা সংরক্ষণ করবে:
preg_replace('/[^\p{L}\p{N} ]+/', '', 'hello-world'); // helloworld
preg_replace('/[^\p{L}\p{N} ]+/', '', 'abc@~#123-+=öäå'); // abc123öäå
preg_replace('/[^\p{L}\p{N} ]+/', '', '你好世界!@£$%^&*()'); // 你好世界
দ্রষ্টব্য: এটি একটি খুব পুরানো, তবে এখনও প্রাসঙ্গিক প্রশ্ন। আমি পরিপূরক তথ্য সরবরাহ করতে বিশুদ্ধরূপে উত্তর দিচ্ছি যা ভবিষ্যতের দর্শকদের জন্য কার্যকর হতে পারে।
[\W_]+
$string = preg_replace("/[\W_]+/u", '', $string);
এটি সমস্ত এজেড, এজেড, 0-9 নয় এবং এটি মুছুন select
এখানে উদাহরণ দেখুন: https://regexr.com/3h1rj
\W
এর বিপরীতটি হ'ল \w
অক্ষরগুলি A-Za-z0-9_
। সুতরাং \W
যে কোনও চরিত্রের সাথে মেলে না A-Za-z0-9_
এবং সেগুলি মুছে ফেলবে। []
একটি হল অক্ষর সেট সীমানা । +
একটি অক্ষর সেট সীমানা উপর অপ্রয়োজনীয় যদিও সাধারনতঃ 1 বা বেশি চরিত্র মানে। u
পতাকা অভিব্যক্তি বিস্তৃতি ইউনিকোড অক্ষর সমর্থন অন্তর্ভুক্ত করা, এটা যেমন চরিত্রেও কোড 255 পরলোক অক্ষর সরানো হবে না, যার অর্থ ª²³µ
। ইউনিকোড এবং এসসিআই অক্ষর সহ 3v4l.org/hSVV5 বিভিন্ন ব্যবহারের উদাহরণ ।
preg_replace("/\W+/", '', $string)
আপনি এটি এখানে পরীক্ষা করতে পারেন: http://regexr.com/
আমিও উত্তরটির সন্ধান করছিলাম এবং আমার উদ্দেশ্য ছিল প্রতিটি নন-আলফা পরিষ্কার করা এবং সেখানে একের বেশি জায়গা থাকা উচিত নয়।
সুতরাং, আমি এ সম্পর্কে অ্যালেক্সের উত্তরটি সংশোধন করেছি এবং এটি আমার জন্য কাজ করছে
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
উপরের
রেজেক্স ব্যাখ্যায় পরিণত sy8ed sirajul7_islam
হয়েছে sy ed sirajul islam
: রিজেক্স সংবেদনশীল উপায়ে বা একাধিক সাদা স্পেস ক্ষেত্রে কোনও একটি থেকে জেড না পরীক্ষা করবে এবং এটি একটিতে রূপান্তরিত হবে স্থান।
আপনি স্ট্রিংকে অক্ষরগুলিতে বিভক্ত করতে এবং ফিল্টার করতে পারেন।
<?php
function filter_alphanum($string) {
$characters = str_split($string);
$alphaNumeric = array_filter($characters,"ctype_alnum");
return join($alphaNumeric);
}
$res = filter_alphanum("a!bc!#123");
print_r($res); // abc123
?>
preg_replace()
কলের তুলনায় সত্যই অপ্রয়োজনীয় বলে মনে হচ্ছে ।