英文を全部大文字もしくは小文字にしたい

英文を全部大文字もしくは小文字、文の頭文字だけ大文字ににします。プログラミングでは、文字同士を大文字もしくは小文字だけにして比較して一致しているかどうか確認します。

mb_convert_caseを使う

mb_convert_caseを使って変換します。この関数は、文字列に対して指定されたモードでケースフォルディングを行う関数です。

Unicode

標準のケースフォルディング関数である strtolower() や strtoupper() と違い、ケースフォルディングは Unicode 文字属性を基準に行われます。したがって、この関数の挙動は ロケールの設定に影響されず、また、すべてのアルファベット、 例えば A ウムラウト (Ä) を変換することができます。

https://www.php.net/manual/ja/function.mb-convert-case.php

すべて大文字に変換

すべて小文字に変換

分の頭文字は大文字、それ以外は小文字に変換

mb_convert_caseには、変換モードがいろいろあります。

  • MB_CASE_UPPER
  • MB_CASE_LOWER
  • MB_CASE_TITLE
  • MB_CASE_FOLD
  • MB_CASE_UPPER_SIMPLE
  • MB_CASE_LOWER_SIMPLE
  • MB_CASE_TITLE_SIMPLE
  • MB_CASE_FOLD_SIMPLE

MB_CASE_UPPER (integer)完全な大文字のケースフォールディングを実行します。 この操作で、文字列の長さが変わる可能性があります。 この定数は mb_strtoupper() で使うモードです。

MB_CASE_LOWER (integer)完全な小文字へのケースフォールディングを実行します。 この操作で、文字列の長さが変わる可能性があります。 この定数は mb_strtolower() で使うモードです。

MB_CASE_TITLE (integer)Unicodeプロパティ由来の大文字小文字の区別の有無に基づいて、Title-case 変換を実行します。 これは特に、クォートやアポストロフィーのハンドリングも改善します。 この操作で、文字列の長さが変わる可能性があります。

MB_CASE_FOLD (integer)文字列に存在する大文字小文字の区別を取り除くことで、完全なケースフォールディング変換を実行します。 これは大文字小文字を区別しないマッチングで使います。 この操作で、文字列の長さが変わる可能性があります。 PHP 7.3 から利用可能

MB_CASE_LOWER_SIMPLE (integer)単純な小文字へのケースフォールディング変換を実行します。 この操作で、文字列の長さは変わりません。 PHP 7.3 から利用可能

MB_CASE_UPPER_SIMPLE (integer)単純な大文字へのケースフォールディング変換を実行します。 この操作で、文字列の長さは変わりません。 PHP 7.3 から利用可能

MB_CASE_TITLE_SIMPLE (integer)単純な Title-case 変換を実行します。 この操作で、文字列の長さは変わりません。 PHP 7.3 から利用可能

MB_CASE_FOLD_SIMPLE (integer)文字列に存在する大文字小文字の区別を取り除くことで、単純なケースフォールディング変換を実行します。 これは大文字小文字を区別しない操作で使います。 この操作で文字列の長さは変わりません。 mbstring 拡張機能で内部的に大文字小文字を区別しない操作で使われていました。 PHP 7.3 から利用可能。

https://www.php.net/manual/ja/mbstring.constants.php

最後にSIMPLEがついていない定数とついているのなぜ2種類あるのかというと、Unicodeのシンプルケースフォールディングとフルケースフォールディング両方あるからです。

So those constants with _SIMPLE suffix are for Unicode’s Simple Case Folding, and those WITHOUT the suffix are for Full Case Folding.

https://stackoverflow.com/questions/54603604/simple-case-folding-vs-full-case-folding-in-python-regex-module/54603836#54603836

そもそもケースフォールディングとはなんでしょうか?

一方で、我々は toLowerCase() や toUpperCase() といった操作を別の目的で使うこともよくあります。それは「大文字・小文字の違いを無視して文字列を比較したい」という目的のために文字列を一旦どちらかの文字種に統一する、というようなものです。Unicode標準は、このような目的のために “Case Folding” という操作を定義しています。Case Foldingは小文字へのCase Mappingとよく似ていますが、「caseless matchingを言語独立に行う」ために最適化されており、例えばギリシア文字の Σ は単語内の位置に関わらず常に σ (U+03C3) に変換されます。

https://engineering.linecorp.com/ja/blog/tolowercase-pitfalls-and-case-folding/

ケースフォールディング(大文字・小文字畳み込み)とは、文字列を比較する際、大文字か小文字に文字を統一する目的のために行う操作です。

フルケースフォールディング

1つのUnicodeコードポイントから2つ以上のコードポイントにマッピングされている大文字・小文字畳み込みを持つ文字も少数存在しています。この大文字・小文字畳み込みの集合を完全な(full)大文字・小文字畳み込みと呼びます。完全な(full)大文字・小文字畳み込みと共通の(common)大文字・小文字畳み込みを一緒に用いて、すべてのUnicodeに対するデフォルトの大文字・小文字畳み込みを提供します。このドキュメントでは、この形式の大文字・小文字畳み込みを、完全な大文字・小文字畳み込み(full casefolding)またはUnicode完全(Unicode full)と呼びます。

http://www.asahi-net.or.jp/~ax2s-kmtn/internet/character/NOTE-charmod-norm-20190204.html#definitionCaseFolding

データが格納領域が得られないアプリケーションによっては、シンプルケースフォールディングを用いることがあります。

大文字・小文字畳み込みの操作を実行する際に追加の格納領域を割り当てられないアプリケーションもあるため、Unicodeは、通常はより多くのまたはより少ないコードポイントに畳み込みを行うコードポイントをマッピングする代わりに、比較の目的で1つのコードポイントを用いるシンプルな(simple)大文字・小文字畳み込みを提供しています。完全な畳み込みとは異なり、この畳み込みによりテキストのコンテンツ(そして、潜在的に意味)は常に変わります。完全な大文字・小文字畳み込みと同様に、シンプルな大文字・小文字畳み込み(simple casefolding)またはUnicodeシンプル(Unicode simple)の大文字・小文字畳み込みは、Unicodeの全範囲を網羅するように、シンプルなsimpleマッピングと共通の(common)マッピングとを組み合わせたものです。Unicodeシンプルは、ウェブでの使用には適していません。

http://www.asahi-net.or.jp/~ax2s-kmtn/internet/character/NOTE-charmod-norm-20190204.html#definitionCaseFolding

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です