2014-09-05 2 views
0

나는 이것을 과거에했지만 더 이상 내가 썼던 것이없고 이전에 어떻게했는지 기억하지 못합니다. 일부 사용자 입력을 교정에, 아무 소용이 없다 그러나 I 물론첫 번째 문자가 숫자 일 때 첫 번째 대문자로 변경

ucfirst(strtolower($text)) 

를 사용」가 아이템은 ""이 아이템은 "말할 때 $ 텍스트 ="4 개 온도 제어 "

I

$text = "4 temperature controls"; 
$result = preg_replace_callback('/^([^a-z]*)([a-z])/', function($m) 
{ 
    return $m[1].strtoupper($m[2]); 
}, strtolower($text)); 

: '그래서 "4 개 온도 컨트롤이"출력했지만 비 알파벳 문자

에게 그것에 대해
+0

어쩌면 정규식이나 나누기 –

답변

2

사용 정규식을 건너 뛰는 ucfirst에 대한 참조를 찾을 수 있습니다 나는이 분류했다 확신은 다음 문자를 예측할 수 없으므로 여기서는 유스 케이스가 아닙니다. 항상 첫 번째 문자로 작업하고 있습니다.

+0

다음과 같이 사용해보십시오 :'$ text = "php : 프로그래밍 언어";'. 그것은'A' 소문자 것입니다. – hek2mgl

+0

@ hek2mgl 그게 내가보기에 OP의 의도 인 것 같습니다 –

+0

아마도 이것은 입력 문자열을 더 자세히 처리 할 것입니다 : http://3v4l.org/iVm5J. 또한 전체 문자열을 strlower 필요가 없습니다. (하지만 아마 필요하지는 않습니다. 단지 힌트입니다) – hek2mgl

0

이 시도 :

<?php 
$str = "4 temperature controls"; 
preg_match("~^(\d+)~", $str, $m); 
$arr = explode($m[1],$str,2); 
echo $m[1]." ".ucfirst(trim($arr[1])); 

?> 
0

ucfirst() 기능은 만과 같이, 이하로 문자를 변환하는 것이 너무 $text 하위 문자열입니다 무엇을해야하는지, 대문자로 문자열의 첫 번째 문자를 반환하는 데 사용됩니다 ... 는 fo를 확인할 수 있도록하는 ctype 테스트를하고 아래의 주석 사항에 따라

$uppercase = $text; 
$lowercase = strtolower(substr($uppercase, 2)); 
$text = $text[0] . " " . ucfirst($lowercase); 

을 (당신은 그 이후 ucfirst() 사용할 수 있습니다) R 첫 번째 알파벳 발생, 따라서 모든 접두사 번호를 무시하는 것은 ...

function textToLower($text) { 
    $textLength = strlen($text); 
    for ($i = 0; $i < $textLength; $i++) { 
      $char = $str[$i]; 
      if (ctype_alpha($char)) { 
       $lowercase = strtolower(substr($text, $i)); 
       $number = substr($text, 0, $i); 
       break; 
      } 
    } 
    $text = $number . ucfirst($lowercase); 
    return $text; 
} 

나는 또한 그것을 포장 한 (위의 코드에만 숫자의 어느 크기 이상 1 자리 없음을 가정 작동합니다) 함수에 ...이 것 출력 예를 들어, 쉽게 사용할 수 있도록하는

$input = "42 IS THE MEANING OF LIFE"; 

$output = textToLower($input); //(With the capitalised first letter) 

echo $output; //Would be... "42 Is the meaning of life" 
+0

첫 번째 문자가 대문자인지 확인하는 ctype 테스트가 있어야합니다. –

+0

@RoyalBg 네가 옳아. 문자열에 첫 번째 영문자가 있는지 확인하는 새 버전을 추가했습니다. 문자열이 한 자리 만 사용한다고 가정합니다. – Kolors

0

이 더 좋은 방법이 될 수 있지만 작동합니다 간단한 preg_match를 사용 할 수있다 :

$text = "4 temperature controls"; 
$match = preg_match('/^([^a-zA-Z]*)(.*)$/', $text, $result); 

$upper = ucfirst(mb_strtolower($result[2])); 
echo $fixed = $result[1].$upper; 
관련 문제