2012-05-10 2 views
3

, 그것을 사용하여 쉽게 :영숫자가 아닌 문자열을 낙타의 경우로 변환하는 방법은 무엇입니까? 나는이 사건을 낙타에 문자열을 변환 할 필요가

$str = 'he said "hello world"'; 
echo mb_convert_case($str, MB_CASE_TITLE, "UTF-8"); 

결과는 다음과 같습니다 :

He Said "hello World" 

mb_convert_case($str, MB_CASE_TITLE, "UTF-8") 

그러나 문자열은 영숫자가 아닌 문자가 포함되어 어떤 경우

하지만 내가 필요합니다 :

He Said "Hello World" 

어떻게 처리 할 수 ​​있습니까?

감사

(PHP.net의 의견에 따라)이 같은
+2

아마도 t o php.net에 대한 의견으로 자신의 기능을 작성하십시오. – Marakoss

답변

0

시도 뭔가

$str = 'he said "hello world"'; 
echo preg_replace('/([^a-z\']|^)([a-z])/ie', '"$1".strtoupper("$2")', strtolower($str)); 
0

사용 설명서! : D가 php.net에서 발견되었습니다

<?php 

function ucwordsEx($str, $separator){ 

     $str = str_replace($separator, " ", $str); 
     $str = ucwords(strtolower($str)); 
     $str = str_replace(" ", $separator, $str); 
     return $str; 

} 
/* 
Example: 
*/ 
echo ucwordsEx("HELLO-my-NAME-iS-maNolO", "-"); 
/* 
Prints: "Hello My Name Is Manolo" 
*/ 

?> 
2

정규 표현식을 사용합니다. 당신은 단지 비 악센트 라틴 문자로 작업하기 위하여려고하는 경우에 이것은 word boundary로 시작되는 모든 소문자 악센트가없는 라틴어 편지를 일치 간단

$str = 'he said "hello WORLD"'; 
echo preg_replace('/\b([a-z])/e', 'strtoupper(\'$1\')', strtolower($str)); 

, 그것은 할 수 있습니다. 편지는 대문자로 대체됩니다. 이뿐만 아니라 다른 언어와 스크립트 작업 할 경우

, 당신은 얻을 것이다 공상 :

$str = 'he said "καλημέρα ΚΌΣΜΕ"'; // this has to be in UTF-8 
echo preg_replace('/(?<!\p{L})(\p{Ll})/eu', 
        'mb_convert_case(\'$1\', MB_CASE_UPPER, \'UTF-8\')', 
        mb_convert_case($str, MB_CASE_LOWER, 'UTF-8')); 

당신이 PCRE의 Unicode 기능을 참조하기 위해 필요한이를 grok 수, 그리고 I에 유의하기 u 수정자를 preg_replace에 추가했습니다. 이것은 대문자 (패턴 \p{Ll})가있는 유니 코드 문자가 앞에오고 다른 문자 (\p{L}negative lookbehind)가 앞에 오지 않는 경우에 해당합니다. 그런 다음이를 대문자로 대체합니다.

See it in action.

업데이트 : 공백 만 단어 경계로 생각하는 것처럼 보입니다.이것은 비 유니 코드 문자에 대한

(?<=\s|^)([a-z]) 
(?<=\s|^)(\p{Ll}) 
+0

** $ str = "Ryan 's shirts are very large"; ** – WebolizeR

+0

@WebolizeR : 예제로 생각하면 결코 완벽하지 않을 것입니다. . Ryan의 셔츠에 문제가 무엇인지 알 수 있지만 해결 방법을 시도하기 전에 구두점과 관련하여 대문자 사용 방법을 세밀하게 지정해야합니다. 그렇지 않으면 각각의 "수정"은 설계된 예제로 알고리즘을 깨뜨릴 수있는 새로운 기회를 제공합니다. – Jon

+0

오케이, @ 존, 내가 필요한 유일한 것은 모든 단어가 대문자로 시작된다는 것입니다. 나의 예에서는 ** 라이언의 **는 하나의 단어이지만 ** 라이언의 **로 변환됩니다. 단어로는 모든 구문을 하나 이상의 공백으로 나눈 것입니다. tHanks – WebolizeR

0

이 경우 낙타 할 문자열로 변환하기 위해 노력할 것 다음과 같은 정규 표현식을 수행 할 수 있습니다 : 여기

preg_replace('/\b([a-z])/e', 'strtoupper("$1")', strtolower($str)); 
0

은 매우 간단한 코드를입니다

echo ucwords('he said '.ucwords('"hello world"')) ; 

출력 그는 Hello World를 말했습니다

+0

이번 답변은 이번에 잘 작동합니다. –

관련 문제