정규 표현식을 사용합니다. 당신은 단지 비 악센트 라틴 문자로 작업하기 위하여려고하는 경우에 이것은 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})
출처
2012-05-10 09:16:26
Jon
아마도 t o php.net에 대한 의견으로 자신의 기능을 작성하십시오. – Marakoss