একটি স্ট্রিং থেকে সংখ্যাগুলি বের করুন


332

আমি একটি স্ট্রিং থেকে নম্বরগুলি বের করতে চাই যার মধ্যে নম্বর এবং অক্ষর রয়েছে:

"In My Cart : 11 items"

আমি এখানে নম্বর 11বা অন্য কোনও নম্বর পেতে চাই ।


এই স্ট্রিং = "আমার কার্টে: 11 আইটেম" ব্যবহার করুন; $ সংখ্যা = প্রেগ_রেপ্লেস ("/ [^ 0-9] {1,4} /", '', $ স্ট্রিং); // রিটার্ন 11
শোরাভ

উত্তর:


363
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);

2
অ্যারে না করে কীভাবে আমি আমার নম্বরটি একটি ভেরিয়েবলে পেতে পারি?
বিজবস

34
$ var = ইমপ্লোড ('', $ ম্যাচগুলি [0]);
গৌরব

2
@ বিজবস একই ধরণের শিরায় চেষ্টা করুন $newstr = preg_replace('!\d+!', '', $str);। এটি আপনার স্ট্রিং থেকে সমস্ত অঙ্ক সরিয়ে দেবে। উদাহরণ: $str = 'In My Cart : 11 12 items';আউটপুট হবে In My Cart : items
ইথার

77
এটি কোনও সংস্থান-বান্ধব উপায় নয়। ব্যবহার preg_replace("/[^0-9]/","",$string);বাfilter_var($str, FILTER_SANITIZE_NUMBER_INT);
ইপো

6
@ ইপো অঙ্কিত filter_var($str, FILTER_SANITIZE_NUMBER_INT);অঙ্কগুলি, প্লাস এবং বিয়োগ চিহ্ন। রেজেক্স কেবলমাত্র অঙ্কগুলি বের করেছে!
প্যাট্রোমো

535

আপনি যদি কেবলমাত্র সংখ্যাগুলি বাদে সমস্ত কিছু ফিল্টার করতে চান তবে ফিল্টার_ভার ব্যবহার করা সবচেয়ে সহজ :

$str = 'In My Cart : 11 items';
$int = (int) filter_var($str, FILTER_SANITIZE_NUMBER_INT);

56
সংখ্যার আগে একটি ড্যাশকে বিয়োগ হিসাবে গণ্য করা হবে।
এলনুর আব্দুররাখিমভ

43
শুধু সংখ্যা আগে নয়। যে কোনও +/- কেটে দেওয়া হবে না। আপনি থাকলে আপনি xxx-yyy-24পাবেন --24। আপনি str_repleace(array('+','-'), '', $result)উভয় লক্ষণ মুছতে ব্যবহার করতে পারেন ।
imclickingmaniac

4
@ আইক্লিক্লিংম্যানিয়াক আপনি max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))অ্যারে এবং স্ট্রিং প্রতিস্থাপন ব্যবহার করে কেবল তা করতে পারেন ।
এডুয়ার্ড

2
সর্বোচ্চ () ব্যবহার করে স্ট্রিংগুলিতে বিয়োগ চিহ্নটিও ফিরে আসবে, আশা স্ট্র্যাপ্লেস () এখানে বিকল্প। টিপস জন্য ধন্যবাদ।
শিব অবুলা

26
abs((int) filter_var($str, FILTER_SANITIZE_NUMBER_INT));
MECU

300
preg_replace('/[^0-9]/', '', $string);

এটি আরও ভাল কাজ করা উচিত! ...


10
আমি এটি পছন্দ করি কারণ এটি একটি স্ট্রিং প্রত্যাবর্তন করে, প্রিগ_ম্যাচ_এল ডলের সাথে উদাহরণগুলির মতো অ্যারে নয়, এবং আমি এটি পছন্দ করি কারণ ফিল্টার_ভার উদাহরণ হিসাবে আমি কেবল একটি সংখ্যার চিহ্ন বা ড্যাশ নয়, সংখ্যা চাই।
ড্যারেল ডুয়েন

43
এই পদ্ধতির সাথে সুস্পষ্ট: 'ইন মাই কার_প্রাইস'-এর মতো কিছু: 500.00মুদ্রণ করবে:50000
এরিকবেস্ট

16
@ এরিকবেস্ট এটি একটি ভাল জিনিস, বিবেচনা করে প্রশ্নটি ছিল extract the numbers from a string- দশমিক বিন্দু কোনও সংখ্যা নয়!
rybo111

1
এটি একটি নিটপিক তবে আপনি সম্ভবত 'ডাবল উদ্ধৃতি নয় একক উদ্ধৃতি ব্যবহার করতে চান "
কমান্ডজেড

16
preg_replace ( '/ [^ 0-9।] /', '', 'abc1.22'); // দশমিক ১.২২ রিটার্ন দেয়
জাজেপার

84

ব্যবহার preg_replace:

$str = '(111) 111-1111';
$str = preg_replace('/\D/', '', $str);
echo $str;

আউটপুট: 1111111111


4
এটা দুর্দান্ত কাজ করছে। এটি +387 (61) 634-783স্ট্রিংকে 38761634783সরাসরি রূপান্তর করে। গৌরবের উত্তরের মতো অ্যারেগুলির আপনাকে যত্ন নিতে হবে না।
বেটেরভস্কি

1
অবশ্যই সেরা উত্তর। Sandbox.onlinephpfunitions.com/code/…
স্টিফান

আমি +কোয়ানটিফায়ারকে দীর্ঘতর ম্যাচগুলি / আরও কম প্রতিস্থাপনের সাথে ম্যাচ করার পরামর্শ দিই ।
মিকম্যাকুসা

21

ভাসমান সংখ্যার জন্য,

preg_match_all('!\d+\.?\d+!', $string ,$match);

ভুল উল্লেখ করার জন্য ধন্যবাদ। @mickmackusa


এটি আসলে ভুল) এটি হওয়া উচিত'!\d*.?\d+!'
যশ

আমি ?আক্ষরিক বিন্দুর পরিমান হিসাবে ব্যবহার করতে পছন্দ করব আমি একাধিক দশমিক পয়েন্ট প্রতীক ধারণ করতে একটি ভাসমান মান আশা করব না। ইয়াশের মন্তব্য করা প্যাটার্নটি ব্যঙ্গাত্মকভাবে ভুল । আক্ষরিক আকার তৈরি করতে ডটটির সামনে একটি স্ল্যাশ দরকার।
মিকম্যাকুসা

11

আমি এর কৃতিত্বের মালিক নই, তবে আমাকে এটি ভাগ করতে হবে। এই রেজেক্স দশমিক পয়েন্ট / স্থানগুলি সহ কমাগুলি সহ একটি স্ট্রিং থেকে নম্বরগুলি পাবে:

/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/

এখান থেকে উদ্ধৃত:
পিএইচপি - রেজেক্স - একটি স্ট্রিং (যেমন 1,120.01) থেকে দশমিক (ডট এবং কমা) দিয়ে একটি সংখ্যা কীভাবে বের করবেন?


এটি পুরো তিনটি সংখ্যার সেটগুলির মধ্যে কমা জন্য স্ট্রিংকে বৈধতা দিচ্ছে না। ... অন্য কারোর প্যাটার্নটি অনুলিপি-পেস্ট করা এবং এটি বুঝতে / পরীক্ষা না করার সাথে সমস্যা।
মিকম্যাকুসা



6

আপনি নিম্নলিখিত ফাংশন ব্যবহার করতে পারেন:

function extract_numbers($string)
{
   preg_match_all('/([\d]+)/', $string, $match);

   return $match[0];
}

\dচরিত্র শ্রেণীর ভিতরে লেখার কোনও লাভ নেই । যেহেতু আপনি পুরো স্ট্রিং ম্যাচে অ্যাক্সেস করছেন তাই প্যাটার্নে ক্যাপচার গ্রুপ লেখার কোনও বুদ্ধি নেই।
মিকম্যাকুসা

4
preg_match_all('!\d+!', $some_string, $matches);
$string_of_numbers = implode(' ', $matches[0]);

এই নির্দিষ্ট ক্ষেত্রে ইমপ্লোডে প্রথম যুক্তি বলছে "ম্যাচগুলিতে প্রতিটি উপাদান আলাদা করে [0] একক স্পেস দিয়ে।" ইমপ্লোড প্রথম সংখ্যার আগে বা শেষ সংখ্যার পরে কোনও স্থান (বা আপনার প্রথম যুক্তি যাই হোক না কেন) রাখবে না।

অন্য কিছু লক্ষণীয় $ ম্যাচগুলি [0] হ'ল যেখানে পাওয়া যায় ম্যাচের অ্যারেগুলি (যা এই নিয়মিত অভিব্যক্তির সাথে মেলে) সঞ্চিত থাকে।

অ্যারের অন্যান্য সূচীগুলি কী কী তা সম্পর্কে আরও স্পষ্টতার জন্য দেখুন: http://php.net/manual/en/function.preg-match-all.php



3
$value = '25%';

অথবা

$value = '25.025$';

অথবা

$value = 'I am numeric 25';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

এটি কেবল সংখ্যার মানটি ফেরত দেবে



3

এই পদক্ষেপটি অনুসরণ করুন এটি স্ট্রিংকে সংখ্যায় রূপান্তর করবে

$value = '$0025.123';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
settype($onlyNumeric,"float");

$result=($onlyNumeric+100);
echo $result;

এটি করার আরেকটি উপায়:

$res = preg_replace("/[^0-9.]/", "", "$15645623.095605659");

0

অন্য উপায়ে (এমনকি ইউনিকোড স্ট্রিং):

$res = array();
$str = 'test 1234 555 2.7 string ..... 2.2 3.3';
$str = preg_replace("/[^0-9\.]/", " ", $str);
$str = trim(preg_replace('/\s+/u', ' ', $str));
$arr = explode(' ', $str);
for ($i = 0; $i < count($arr); $i++) {
    if (is_numeric($arr[$i])) {
        $res[] = $arr[$i];
    }
}
print_r($res); //Array ( [0] => 1234 [1] => 555 [2] => 2.7 [3] => 2.2 [4] => 3.3 ) 

0

এই স্ক্রিপ্টটি প্রথমে একটি ফাইল তৈরি করে, একটি লাইনে নম্বর লিখুন এবং সংখ্যা ছাড়া অন্য কোনও অক্ষর পেলে পরবর্তী লাইনে পরিবর্তিত হয়। শেষ অবধি, আবার এটি একটি তালিকাতে সংখ্যাগুলি বাছাই করে।

string1 = "hello my name 12 is after 198765436281094and14 and 124de"
f= open("created_file.txt","w+")
for a in string1:
    if a in ['1','2','3','4','5','6','7','8','9','0']:
        f.write(a)
    else:
        f.write("\n" +a+ "\n")
f.close()


#desired_numbers=[x for x in open("created_file.txt")]

#print(desired_numbers)

k=open("created_file.txt","r")
desired_numbers=[]
for x in k:
    l=x.rstrip()
    print(len(l))
    if len(l)==15:
        desired_numbers.append(l)


#desired_numbers=[x for x in k if len(x)==16]
print(desired_numbers)

-1

আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে এটি একটি বিকল্পও হতে পারে:

$str = 'In My Cart : 11 items';
$num = '';

for ($i = 0; $i < strlen($str); $i++) {

    if (is_numeric($str[$i])) {
        $num .= $str[$i];
    }
}

echo $num; // 11

যদিও আমি একটি রেইজেক্সকে রাজি করতাম বা filter_var()বর্ণিত ক্ষেত্রে আরও কার্যকর হব।


-1

utf8 স্ট্রের জন্য:

function unicodeStrDigits($str) {
    $arr = array();
    $sub = '';
    for ($i = 0; $i < strlen($str); $i++) { 
        if (is_numeric($str[$i])) {
            $sub .= $str[$i];
            continue;
        } else {
            if ($sub) {
                array_push($arr, $sub);
                $sub = '';
            }
        }
    }

    if ($sub) {
        array_push($arr, $sub); 
    }

    return $arr;
}

-1

আপনি যদি না জানেন তবে কোন ফর্ম্যাটটি নম্বর? int বা ভাসমান, তারপরে এটি ব্যবহার করুন:

$string = '$125.22';

$string2 = '$125';

preg_match_all('/(\d+.?\d+)/',$string,$matches); // $matches[1] = 125.22

preg_match_all('/(\d+.?\d+)/',$string2,$matches); // $matches[1] = 125

-1

এই ফাংশনগুলি ভাসমান সংখ্যাগুলিও পরিচালনা করবে

$str = "Doughnuts, 4; doughnuts holes, 0.08; glue, 3.4";
$str = preg_replace('/[^0-9\.]/','-', $str);
$str = preg_replace('/(\-+)(\.\.+)/','-', $str);
$str = trim($str, '-');
$arr = explode('-', $str);

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