1

次のように、いくつかの文字列/文を小文字に変換する必要があります: " ȘEF DE CABINET "、次に、これらの文字列の最初の単語の最初の文字(分音記号付き)のみを大文字に変換します。すべての単語の最初の文字を文字列から変換する関数を見つけました。それを私のニーズに適応させる方法は?

これはコードです:

function sentence_case( $s ) {
   $s = mb_convert_case( $s, MB_CASE_LOWER, 'UTF-8' );
   $arr = preg_split("//u", $s, -1, PREG_SPLIT_NO_EMPTY);
   $result = "";
   $mode = false;
   foreach ($arr as $char) {
      $res = preg_match(
         '/\\p{Mn}|\\p{Me}|\\p{Cf}|\\p{Lm}|\\p{Sk}|\\p{Lu}|\\p{Ll}|'.
         '\\p{Lt}|\\p{Sk}|\\p{Cs}/u', $char) == 1;
      if ($mode) {
         if (!$res)
            $mode = false;
      } 
      elseif ($res) {
         $mode = true;
         $char = mb_convert_case($char, MB_CASE_TITLE, "UTF-8");
      }
      $result .= $char;
   }

   return $result; 
}
4

2 に答える 2

2

最後に、これは私が使用したものです (正しい方向については @ben-pearl-kahan に感謝します!):

function sentence_case( $string ) {
   $string = mb_strtolower( $string, 'UTF-8' ); //convert the string to lowercase
   $string_len = mb_strlen( $string, 'UTF-8' ); //calculate the string length
   $first_letter = mb_substr( $string, 0, 1, 'UTF-8' ); //get the first letter of the string
   $first_letter = mb_strtoupper( $first_letter, 'UTF-8' ); //convert the first letter to uppercase
   $rest_of_string = mb_substr( $string, 1, $string_len, 'UTF-8' ); //get the rest of the string
   return $first_letter . $rest_of_string; //return the string converted to sentence case
}
于 2013-09-16T20:03:32.467 に答える
1

substr最初の文字だけを取得し、それに対して実行するために使用します。

function sentence_case( $x ) {
   $s = substr($x,0,1);
   $s = mb_convert_case( $s, MB_CASE_LOWER, 'UTF-8' );
   $arr = preg_split("//u", $s, -1, PREG_SPLIT_NO_EMPTY);
   $result = "";
   $mode = false;
   foreach ($arr as $char) {
      $res = preg_match(
         '/\\p{Mn}|\\p{Me}|\\p{Cf}|\\p{Lm}|\\p{Sk}|\\p{Lu}|\\p{Ll}|'.
         '\\p{Lt}|\\p{Sk}|\\p{Cs}/u', $char) == 1;
      if ($mode) {
         if (!$res)
            $mode = false;
      } 
      elseif ($res) {
         $mode = true;
         $char = mb_convert_case($char, MB_CASE_TITLE, "UTF-8");
      }
      $result .= $char;
   }

   return $result.substr($x,1); 
}
于 2013-09-15T22:54:31.200 に答える