2011-03-21 15 views
8

मैं उपयोगकर्ता इनपुट को साफ करने के लिए एक फ़ंक्शन लिखने की कोशिश कर रहा हूं।वाक्य में पहले शब्द के पहले अक्षर को कैपिटल कैसे करें?

मैं इसे सही बनाने की कोशिश नहीं कर रहा हूं। मैं अपरकेस में एक पूर्ण अनुच्छेद की तुलना में लोअरकेस में कुछ नाम और शब्दकोष होगा।

मुझे लगता है कि फ़ंक्शन नियमित अभिव्यक्तियों का उपयोग करना चाहिए लेकिन मैं उन लोगों के साथ बहुत बुरा हूं और मुझे कुछ मदद चाहिए।

यदि निम्नलिखित अभिव्यक्तियों को एक पत्र के बाद किया जाता है, तो मैं उस पत्र को अपरकेस बनाना चाहता हूं।

"." 
". " (followed by a space) 
"!" 
"! " (followed by a space) 
"?" 
"? " (followed by a space) 

इससे भी बेहतर, फ़ंक्शन "।", "!" के बाद एक स्थान जोड़ सकता है। तथा "?" अगर उनको एक पत्र के बाद किया जाता है।

यह कैसे प्राप्त किया जा सकता है?

+1

अच्छी बात यह है कि इसमें फोरम के साथ कुछ लेना देना नहीं है। यह मानने के बजाय कि मैं क्या करने की कोशिश कर रहा हूं, कुछ मदद के बारे में कैसे? – Enkay

+2

आपको और जानकारी की आवश्यकता नहीं है। मैंने समझाया कि मैं स्पष्ट रूप से क्या करने की कोशिश कर रहा हूं। यदि आप मदद कर सकते हैं, तो ऐसा करें लेकिन यदि नहीं, तो कृपया कहीं और ट्रोल करें। – Enkay

+2

@Dagon @Enkay कृपया एक दूसरे के प्रति अधिक सम्मानित रहें। @Dagon यदि कुछ विशिष्ट है जो आप @ एन्के से चाहते हैं, तो इसके बारे में पूछने के बारे में कैसे? – marcog

उत्तर

30
$output = preg_replace('/([.!?])\s*(\w)/e', "strtoupper('\\1 \\2')", ucfirst(strtolower($input))); 

के बाद से संशोधक पीएचपी 5.5.0 में पदावनत किया गया है:

$output = preg_replace_callback('/([.!?])\s*(\w)/', function ($matches) { 
    return strtoupper($matches[1] . ' ' . $matches[2]); 
}, ucfirst(strtolower($input))); 
+0

धन्यवाद यह नहीं एक समस्या काम किया – Enkay

+1

:) – w35l3y

+5

बस याद दिलाने के लिए, ई संशोधक अपने कोड मुझे ब्याज w35l3y पीएचपी 5.5 –

1

./!/? का उपयोग करके सरणी में पृथक स्ट्रिंग को डिलीमीटर के रूप में। प्रत्येक स्ट्रिंग के माध्यम से लूप करें और ucfirst(strtolower($currentString)) का उपयोग करें, और फिर उन्हें एक स्ट्रिंग में फिर से शामिल करें।

+0

में स्टिंग किस भाषा में है दिलचस्प लेना। मै उसे करने की एक कोशिश तो करूंगा। मैं अपने रेगेक्स को थोड़ा अभ्यास करने की उम्मीद कर रहा था लेकिन यह काम पूरा हो सकता था। धन्यवाद। – Enkay

3

यहाँ कोड है कि के रूप में आप चाहते थे है:

<?php 

$str = "paste your code! below. codepad will run it. are you sure?ok"; 

//first we make everything lowercase, and 
//then make the first letter if the entire string capitalized 
$str = ucfirst(strtolower($str)); 

//now capitalize every letter after a . ? and ! followed by space 
$str = preg_replace_callback('/[.!?] .*?\w/', 
    create_function('$matches', 'return strtoupper($matches[0]);'), $str); 

//print the result 
echo $str . "\n"; 
?> 

उत्पादन:Paste your code! Below. Codepad will run it. Are you sure?ok

+0

आप अब create_function की जरूरत नहीं है।) ( – dynamic

1
$output = preg_replace('/([\.!\?]\s?\w)/e', "strtoupper('$1')", $input) 
1

यह:

<? 
$text = "abc. def! ghi? jkl.\n"; 
print $text; 
$text = preg_replace("/([.!?]\s*\w)/e", "strtoupper('$1')", $text); 
print $text; 
?> 

Output: 
abc. def! ghi? jkl. 
abc. Def! Ghi? Jkl. 

ध्यान दें कि आप ज नहीं है बचने के लिए आह्वान!! के भीतर []।

0

कैसे इस बारे में? Regex के बिना।

$letters = array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' 
); 
foreach ($letters as $letter) { 
    $string = str_replace('. ' . $letter, '. ' . ucwords($letter), $string); 
    $string = str_replace('? ' . $letter, '? ' . ucwords($letter), $string); 
    $string = str_replace('! ' . $letter, '! ' . ucwords($letter), $string); 
} 

मेरे लिए ठीक काम किया।