एक स्ट्रिंग से गैर-संख्यात्मक वर्ण (अवधि और अल्पविराम को छोड़कर) निकालें


150

यदि मेरे पास निम्न मूल्य हैं:

 $var1 = AR3,373.31

 $var2 = 12.322,11T

मैं एक नया चर कैसे बना सकता हूं और इसे उस डेटा की प्रति में सेट कर सकता हूं जिसमें कोई गैर-संख्यात्मक वर्ण हैं, जो अल्पविराम और अवधि के अपवाद के साथ हटा दिया गया है? उपरोक्त मान निम्नलिखित परिणाम लौटाएंगे:

 $var1_copy = 3,373.31

 $var2_copy = 12.322,11

जवाबों:


335

आप सभी गैर-संख्यात्मक वर्ण और अल्पविराम और अवधि / पूर्ण विराम को स्वैप करने के लिए preg_replace का उपयोग कर सकते हैं :

<?php
    $testString = '12.322,11T';
    echo preg_replace('/[^0-9,.]/', '', $testString);
?>

6
यह भी देखें php function money_function () ( php.net/manual/en/function.money-format.php )
horatio

5
[^ 0-9] किसी भी गैर-संख्यात्मक चरित्र से मेल खाएगा, इसलिए अल्पविराम और पूर्ण विराम जोड़ना आवश्यक नहीं है। यह पर्याप्त है: गूंज preg_replace ('/ [^ ^ 0-9] /', '', $ testString);
बिलरिचर्ड्स

6
@billrichards मुझे नहीं लगता कि यह सही है। याद रखें कि वह संख्यात्मक वर्णों के साथ अल्पविराम और पूर्ण विराम को बनाए रखना चाहता है, न कि उन्हें हटाना।
रिचट 222

1
@billrichards जैसा कि ओपी ने कहा (जोर मेरा), " अल्पविराम और वर्ण को छोड़कर अल्पविराम और बिंदु "।
जॉन पार्कर

क्या उस अवधि को बैकस्लैश की आवश्यकता नहीं है? अवधि का अर्थ है "कोई भी वर्ण"?
स्कॉट

66

मुझे आश्चर्य है कि वहाँ filter_var का कोई उल्लेख नहीं किया गया है इस तरह के एक पुराने सवाल के लिए यहां का ...

PHP में सैनिटाइजेशन फिल्टर्स का उपयोग करके इसे बनाने की विधि है । विशेष रूप से, इस स्थिति में उपयोग करने FILTER_SANITIZE_NUMBER_FLOATवाला FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSANDझंडे के साथ है । इस तरह:

$numeric_filtered = filter_var("AR3,373.31", FILTER_SANITIZE_NUMBER_FLOAT,
    FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
echo $numeric_filtered; // Will print "3,373.31"

यह भी ध्यान देने योग्य हो सकता है कि क्योंकि यह अंतर्निहित PHP के लिए है, यह PHP के वर्तमान पुस्तकालयों के साथ रेगेक्स का उपयोग करने की तुलना में थोड़ा तेज़ है (यद्यपि नेनोसेकंड में शाब्दिक रूप से)।


2
IMO यह सबसे अच्छा जवाब है।
ओगियर स्कैल्विस

30

सभी गैर-संख्यात्मक वर्णों को वास्तव में निकालने का सबसे सरल तरीका:

echo preg_replace('/\D/', '', $string);

\D "कोई भी वर्ण जो दशमलव अंक नहीं है" का प्रतिनिधित्व करता है

http://php.net/manual/en/regexp.reference.escape.php


यह अब तक का सबसे अच्छा उत्तर है :)
baron_bartek

4

आप filter_varअंकों, डॉट और अल्पविराम को छोड़कर सभी अवैध वर्णों को हटाने के लिए उपयोग कर सकते हैं ।

  • FILTER_SANITIZE_NUMBER_FLOATफिल्टर स्ट्रिंग से सभी गैर-संख्यात्मक कैरेक्टर दूर करने के लिए प्रयोग किया जाता है।
  • FILTER_FLAG_ALLOW_FRACTION भिन्न विभाजक की अनुमति दे रहा है " . "
  • FILTER_FLAG_ALLOW_THOUSANDस्ट्रिंग से अल्पविराम प्राप्त करने का उद्देश्य ।

कोड

$var1 = '12.322,11T';

echo filter_var($var1, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);

उत्पादन

12.322,11

फ़िल्टर_वर () और स्वच्छता फ़िल्टर के बारे में अधिक पढ़ने के लिए


2

यदि अनुरोध सभी (और न केवल एक) गैर संख्यात्मक चार को हटाने के लिए है, तो शायद पिछले को इस तरह से बहुत ही सरल तरीके से लिखा जा सकता है (लेकिन आप स्ट्रिंग को पास करने के लिए एक फ़ंक्शन लिख सकते हैं और इसे चार्ट के बिना आवश्यक मान वापस कर सकते हैं। .. वैसे भी ..):

<?php
$String1 = 'AR3,373.31';
$String2 = '12.322,11T';

echo preg_replace('/[^0-9,.]+/i', '', $String1);
echo preg_replace('/[^0-9,.]+/i', '', $String2);
?>

1

यदि अक्षर हमेशा शुरुआत में या अंत में होते हैं, तो आप बस ट्रिम का उपयोग कर सकते हैं ... कोई रेगेक्स की आवश्यकता नहीं है

$string = trim($string, "a..zA..Z"); // this also take care of lowercase

"AR3,373.31" --> "3,373.31"
"12.322,11T" --> "12.322,11"
"12.322,11"  --> "12.322,11"

महत्वपूर्ण: यह केवल स्ट्रिंग से अक्षरों को हटा देगा। अन्य वर्ण, जैसे रिक्त स्थान, कोष्ठक, उद्धरण, आदि को परिणाम के अंदर रखा जाता है। -> केवल इस समाधान का उपयोग करें, यदि आप जानते हैं कि आपके इनपुट स्ट्रिंग में केवल अक्षर और संख्याएं हैं, और कोई अन्य वर्ण नहीं है!
फिलिप

-1

मिदपर्का के रूप में एक ही जवाब है, लेकिन हटा दें,.

$unformatted_phone = "phone 122-3222223.ext 442";
echo preg_replace("/[^0-9]/", "", $unformatted_phone);

कृपया पोस्ट में अपने ब्लॉग / साइट के लिंक न जोड़ें। जिसे स्पैम माना जा सकता है।
तुषार

डाउनवोट: क्योंकि मिडपार्क का जवाब एकदम सही था। ओपी डॉट्स और कॉमा रखना चाहते हैं लेकिन आपका जवाब उन्हें हटा देता है।
कार्लोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.