कई व्हाट्सएप निकालें


208

मैं $row['message']एक MySQL डेटाबेस से प्राप्त कर रहा हूं और मुझे इस तरह के सभी व्हाट्सएप को हटाने की आवश्यकता है \n \t

$row['message'] = "This is   a Text \n and so on \t     Text text.";

इसे स्वरूपित किया जाना चाहिए:

$row['message'] = 'This is a Text and so on Text text.';

मैंने कोशिश की:

 $ro = preg_replace('/\s\s+/', ' ',$row['message']);
 echo $ro;

लेकिन यह \nया नहीं हटाता है \t, सिर्फ एक स्थान। किसी ने मुझे बता सकते हैं कि कैसे करना है?


1
न्यूलाइन और टैब वर्ण एकल उद्धरण में हैं, इसलिए आप उन्हें शाब्दिक चाहते हैं?
मार्क लालोर

मैंने कोड sectin के उद्धरण को \ n और \ t के साथ इसे दोहरे-उद्धरणों में बदलकर तय किया।
बटल बस्कस

जवाबों:


394

आप की जरूरत है:

$ro = preg_replace('/\s+/', ' ',$row['message']);

आप \s\s+एक या अधिक व्हाट्सएप के बाद व्हाट्सएप (स्पेस, टैब या न्यूलाइन) का उपयोग कर रहे हैं । जो प्रभावी रूप से दो या दो से अधिक व्हाट्सएप को एक ही स्थान से प्रतिस्थापित करता है।

क्या आप चाहते हैं, एक या एक सफेद स्थान के साथ अधिक खाली स्थान के की जगह ताकि आप पैटर्न का उपयोग कर सकते है \s\s*या \s+(अनुशंसित)


1
उसकी विधि इस से बेहतर है: आप एक स्थान को एक स्थान से क्यों बदलेंगे?
nickf

16
वह अंतरिक्ष के साथ \ n और t को भी बदलना चाहता है। अब उनका पैटर्न इनसे मेल नहीं खाता, $ x के लिए कहें = "does \ nthis \ twork"; ओपी चाहता है कि सभी व्हाट्सएप को एक सिंगल स्पेस से बदल दिया जाए।
कोडेडडिक्ट

@codadict, हम कैसे \ n रख सकते हैं और स्ट्रिंग से अन्य सभी कई स्थान और टैब निकाल सकते हैं? कृपया मेरी मदद करें
9:20 बजे मंसूरखान चेरुपुझा

क्या आप अधिक विशिष्ट हो सकते हैं क्यों "\" + की सिफारिश की जाती है?
3

6
ध्यान दें कि PHP में \s"वर्टिकल टैब" शामिल नहीं है chr(11)। इसे शामिल करने के लिए आपको spaceचरित्र वर्ग का उपयोग करने की आवश्यकता है : [[:space:]]+ php.net/manual/en/regexp.reference.character-classes.php
यारोस्लाव

68
<?php
$str = "This is  a string       with
spaces, tabs and newlines present";

$stripped = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $str);

echo $str;
echo "\n---\n";
echo "$stripped";
?>

यह आउटपुट

This is  a string   with
spaces, tabs and newlines present
---
This is a string with spaces, tabs and newlines present

3
आप एक सच्चे जीवन रक्षक हैं। मैं इस बारे में खिड़की से बाहर कूदने वाला था।
बाइक 1777

नीट, अभी भी सहायक
spekulatius

16
preg_replace('/[\s]+/mu', ' ', $var);

\s पहले से ही टैब्स और नई लाइनें शामिल हैं, इसलिए रेगेक्स के ऊपर यह पर्याप्त प्रतीत होता है।


2
स्क्वायर कोष्ठक यहाँ आवश्यक नहीं हैं क्योंकि उनके भीतर केवल एक चीज है। /mवहाँ के रूप में नहीं कर रहे हैं नहीं होते एक प्रभाव है ^या $एंकर और /uयह थोड़ा धीमा करने के लिए छोड़कर नीचे और मर जाते हैं कोई असर नहीं होगा यदि इनपुट स्ट्रिंग नहीं है वैध UTF-8 (यह क्या प्रभावित नहीं करता है \sसे मेल खाता है, लेकिन यह असर पड़ेगा \pZ)।
थोमसट्रेटर

12

एक समारोह के लिए सरलीकृत:

function removeWhiteSpace($text)
{
    $text = preg_replace('/[\t\n\r\0\x0B]/', '', $text);
    $text = preg_replace('/([\s])\1+/', ' ', $text);
    $text = trim($text);
    return $text;
}

Danuel O'Neal जवाब पर आधारित है।


7
$str='This is   a Text \n and so on Text text.';
print preg_replace("/[[:blank:]]+/"," ",$str);

2
यह वह है जिसने मेरे लिए सबसे अच्छा काम किया है। इसके अलावा, मैं स्ट्रिंग की शुरुआत और अंत में
व्हॉट्सएप

@Dziamid आप इसे ट्रिम (preg_replace (...)) के साथ कर सकते हैं
Balázs Varga

7

मैं यहाँ समस्या की नकल नहीं कर सकता:

$x = "this    \n \t\t \n    works.";
var_dump(preg_replace('/\s\s+/', ' ', $x));
// string(11) "this works."

मुझे यकीन नहीं है कि यह सिर्फ एक ट्रांसक्रिप्शन त्रुटि थी या नहीं, लेकिन आपके उदाहरण में, आप एकल-उद्धृत स्ट्रिंग का उपयोग कर रहे हैं। \nऔर \tकेवल नई-पंक्ति और टैब के रूप में माना जाता है यदि आपको एक डबल उद्धृत स्ट्रिंग मिल गया है। अर्थात्:

'\n\t' != "\n\t"

संपादित करें : जैसा कि कोडडडिक्ट ने बताया है, \s\s+एक एकल टैब वर्ण को प्रतिस्थापित नहीं करेगा। मुझे अभी भी नहीं लगता कि उपयोग \s+करना एक कुशल उपाय है, इसलिए इसके बजाय इसके बारे में कैसे:

preg_replace('/(?:\s\s+|\n|\t)/', ' ', $x);

2
+1, सच। बहुत सारे सिंगल स्पेस के साथ एक स्ट्रिंग के लिए (जो आमतौर पर मामला है) अंतरिक्ष को अंतरिक्ष से बदलना अक्षम है।
कोडेडडिक्ट

1
@coaddict: अपनी परिकल्पना का परीक्षण करने के लिए, मैंने प्रत्येक प्रतिस्थापन के 1000 के माध्यम से चलने और प्रत्येक के समय की जांच करने के लिए एक त्वरित स्क्रिप्ट लिखी। स्ट्रिंग '+1, ट्रू के लिए। बहुत सारे सिंगल स्पेस के साथ एक स्ट्रिंग के लिए (जो आमतौर पर मामला है) अंतरिक्ष को अंतरिक्ष से बदलना अक्षम है। - कोडडक्ट 24 फरवरी '13:10 बजे' , एक हजार \ s + preg_replace () कॉल्स ने 0.010547876358032 सेकंड्स, और एक हजार (?: \ _ S \ s + | \ n। \ T। Preg_replace () कॉल्स लिया 0.013049125671387, यह लगभग 30% धीमा है।
जोसेफ गाल

आप उस अंतिम उदाहरण में "\ r" जोड़ना चाह सकते हैं क्योंकि कुछ कंप्यूटर अपने आप (Apple Mac?) पर एकल "r" का उपयोग करते हैं
thomasrutter

4
preg_replace('/(\s\s+|\t|\n)/', ' ', $row['message']);

यह सभी टैब, सभी न्यूलाइन्स और कई स्पेस, टैब और न्यूलाइन्स के सभी कॉम्बिनेशन को एक ही स्पेस से बदल देता है।


4
<?php
#This should help some newbies
# REGEX NOTES FROM DANUEL
# I wrote these functions for my own php framework
# Feel Free to make it better
# If it gets more complicated than this. You need to do more software engineering/logic.
# (.)  // capture any character
# \1   // if it is followed by itself
# +    // one or more

class whitespace{

    static function remove_doublewhitespace($s = null){
           return  $ret = preg_replace('/([\s])\1+/', ' ', $s);
    }

    static function remove_whitespace($s = null){
           return $ret = preg_replace('/[\s]+/', '', $s );
    }

    static function remove_whitespace_feed( $s = null){
           return $ret = preg_replace('/[\t\n\r\0\x0B]/', '', $s);
    }

    static function smart_clean($s = null){
           return $ret = trim( self::remove_doublewhitespace( self::remove_whitespace_feed($s) ) );
    }
}
$string = " Hey   yo, what's \t\n\tthe sc\r\nen\n\tario! \n";
echo whitespace::smart_clean($string);

स्थैतिक समारोह remove_whitespace किस कारण से है? आप परिभाषित करते हैं लेकिन इसका उपयोग कभी नहीं करते हैं।
लुकास लाइजिस

इनमें से प्रत्येक का उपयोग होता है, लेकिन इनमें से कोई भी वह नहीं हासिल करता है जो सवाल पूछता है जिसके लिए कई लगातार व्हाट्सएप को केवल एक के साथ बदलना है। आपका "remove_doublewhitespace" केवल एक से अधिक जगह लेंगे ही खाली स्थान के चरित्र, तो यह "\ n \ n \ n" के साथ एक ', लेकिन यह करने के लिए "\ r \ n" कुछ भी नहीं होगा की जगह लेंगे
thomasrutter

4

बिना preg_replace ()

$str = "This is   a Text \n and so on \t     Text text.";
$str = str_replace(["\r", "\n", "\t"], " ", $str);
while (strpos($str, "  ") !== false)
{
    $str = str_replace("  ", " ", $str);
}
echo $str;

2

मैं इस कोड और पैटर्न का उपयोग करता हूं:

preg_replace('/\\s+/', ' ',$data)

$data = 'This is   a Text 
   and so on         Text text on multiple lines and with        whitespaces';
$data= preg_replace('/\\s+/', ' ',$data);
echo $data;

आप इसे http://writecodeonline.com/php/ पर देख सकते हैं


यह मेरे साथ इस क्वेरी में mariaDB में भी काम करता है: SELECT search_able, REGEXP_REPLACE (search_able,"\\s+",' ') FROM book where id =260 सो
थैंक्स

1

आपको इसकी आवश्यकता इस प्रकार है:

echo preg_replace('/\s{2,}/', ' ', "This is   a Text \n and so on \t     Text text."); // This is a Text and so on Text text.

1

यह वह है जो मैं उपयोग करूंगा:

ए। उदाहरण के लिए, दोहरे उद्धरण चिह्नों का उपयोग करना सुनिश्चित करें:

$row['message'] = "This is   a Text \n and so on \t     Text text.";

ख। अतिरिक्त व्हाट्सएप को हटाने के लिए, उपयोग करें:

$ro = preg_replace('/\s+/', ' ', $row['message']); 
echo $ro;

यह सबसे तेज़ समाधान नहीं हो सकता है, लेकिन मुझे लगता है कि इसके लिए सबसे कम कोड की आवश्यकता होगी, और इसे काम करना चाहिए। मैंने कभी भी mysql का उपयोग नहीं किया है, इसलिए मैं गलत हो सकता हूं।


1

सच्चाई पर, अगर आपको लगता है कि आप कुछ इस तरह चाहते हैं:

preg_replace('/\n+|\t+|\s+/',' ',$string);


-2

बिना preg_replace, लूप की मदद से।

<?php

$str = "This is   a Text \n and so on \t     Text text.";
$str_length = strlen($str);
$str_arr = str_split($str);
for ($i = 0; $i < $str_length; $i++) {
    if (isset($str_arr[$i + 1])
       && $str_arr[$i] == ' '
       && $str_arr[$i] == $str_arr[$i + 1]) {
       unset($str_arr[$i]);
    } 
    else {
      continue;
    }
}

 echo implode("", $str_arr) ; 

 ?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.