2011-04-05 12 views
9
$q = durham-region; 

$q = ucfirst($q); 

$q = Durham-region; 

डैश (डरहम-क्षेत्र) के बाद पत्र को कैपिटल कैसे करूं? क्या मुझे दो को विभाजित करना होगा और पूंजीकरण करना होगा?PHP डैश

उत्तर

15

अपडेट किया गया समाधान

पीएचपी 5.5 के रूप में, preg_replace के लिए e संशोधक मान्य नहीं है।

$q = preg_replace_callback('/(\w+)/g', create_function('$m','return ucfirst($m[1]);'), $q) 

या

$q = implode('-', array_map('ucfirst', explode('-', $q))); 

मूल उत्तर

आप e का उपयोग कर preg_replace इस्तेमाल कर सकते हैं: सबसे अच्छा विकल्प अब जैसे, सुझाव है कि इस का उपयोग नहीं करता से एक का उपयोग करने के लिए है संशोधक इस तरह:

$test = "durham-region"; 
$test = preg_replace("/(\w+)/e","ucfirst('\\1')", $test); 
echo $test; 
// Durham-Region 
+0

बहुत बढ़िया काम करता है! – mrlayance

+0

मैं कभी भी ई संशोधक के बारे में नहीं जानता था, अच्छा! आप इस तरह रेगेक्स को सरल बना सकते हैं: '$ test = preg_replace ("/(\ w *)/e "," ucfirst ('\\ 1') ", $ test);' –

+0

क्लीनर कोड पर अच्छी कॉल - हाँ, ई संशोधक के पास उपयोग का एक टन नहीं है, लेकिन फिर भी यह है :) – Kelly

0

हां। ucfirst() बस स्ट्रिंग के पहले अक्षर को पूंजीकृत करता है। यदि आप एकाधिक अक्षरों को पूंजीकृत करना चाहते हैं, तो आपको एकाधिक तार बनाना होगा।

$strings = explode("-", $string); 
$newString = ""; 
foreach($strings as $string){ 
    $newString += ucfirst($string); 
} 

function ucfirst_all($delimiter, $string){ 
    $strings = explode("-", $string); 
    $newString = ""; 
    foreach($strings as $string){ 
     $newString += ucfirst($string); 
    } 
    return $newString; 
} 
+0

आप मतलब यह नहीं है '=' ? –

0

आप इस प्रकार का नियमित अभिव्यक्ति कॉलबैक विधि के साथ यह कर सकता है:

$q = preg_replace_callback('/\-([a-z]+)/g', create_function(
      '$m', 'return "-" . ucfirst($m[1]);' 
     ),$q) 
7

वन-लाइनर कि e PCRE संशोधक का उपयोग करके envolve नहीं करता है:

$str = implode('-', array_map('ucfirst', explode('-', $str))); 
+0

यह एक लाइनर मेरे लिए काम करता है (उमलाइट वाले शब्दों के लिए भी काम करता है)। –

0

यह ध्यान रखें कि यहाँ प्रदान समाधान UTF-8 तार साथ काम नहीं करेंगे महत्वपूर्ण है!

$str = "Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει-υπέρ νωθρού κυνός"; 
$str = explode('-', mb_convert_case($str, MB_CASE_TITLE)); 
$str = implode('-', array_map('mb_convert_case', $str, array(MB_CASE_TITLE, "UTF-8"))); 
echo $str; 

// str= Τάχιστη Αλώπηξ Βαφήσ Ψημένη Γη, Δρασκελίζει-Υπέρ Νωθρού Κυνόσ 
1

एक और oneliner:

str_replace(' ','',ucwords(str_replace('-',' ',$action))) 
+0

सिर्फ एक सावधानी, यह तारों को प्रभावित कर सकता है जिसमें दोनों में एक स्थान और डैश होता है, लेकिन एकल शब्दों के लिए, यह भी अच्छा है। –

0

नज़र

function UpperCaseAfterDash($wyraz) 
    { 
    $rozbij = explode('-',$wyraz); 
    echo $rozbij[0].'-'. 
    ucfirst($rozbij[1]); 
    } 

UpperCaseAfterDash("input-text"); 

समारोह से ऊपर रिटर्न इनपुट पाठ

आप शहर के साथ उदाहरण के लिए एक पानी का छींटा के बाद ही अपरकेस अक्षर की जरूरत है नाम (Jastrzębie-Zdrój) यह पर्याप्त होगा, लेकिन यदि आपको एक से अधिक की आवश्यकता है ..., बस गिनें कि कितने सरणी तत्व (उपरोक्त कोड में विस्फोट के बाद) मौजूद हैं, फिर लूप का उपयोग करें।

स्वागत करती है,

5

ucwords की delimiter पैरामीटर के लिए धन्यवाद, पीएचपी 5.4.32 और 5.5.16 के बाद से, यह इस रूप में सरल है:।

$string = ucwords($string, "-"); 
संबंधित मुद्दे