PHPで文字列を扱うための4つの方法
まとめ
これらの文字列の書き方を表にまとめてみました。
echoするもの | 実行結果 | |||
---|---|---|---|---|
シングルクォート | ダブルクォート | ヒアドキュメント | Nowdoc | |
' | エラー | ' | ' | ' |
\' | ' | \' | \' | \' |
" | " | エラー | " | " |
\" | \" | " | \" | \" |
\\ | \ | \ | \ | \\ |
\n | \n | ↵ | ↵ | \n |
\t | \t | \t | ||
\$100 | \$100 | $100 | $100 | \$100 |
$hello | $hello | こんにちは | こんにちは | $hello |
いろいろな書き方があって、どれを使っていいか分からない!と悩んでしまう方もいるかもしれませんね。その場合は、以下のいずれかにルールを決めるといいと思います。
- 常にシングルクォートを使う。改行や変数は、連結演算子を使って書く。
- 常にダブルクォートを使う。改行や変数も書き放題。
- 必要なときのみダブルクォートを使い、そうでないときはシングルクォートで書く。
どのようなルールにするにせよ、書き方のルールを作っておくと、後々とても重宝すると思いますよ。
文字列の操作
文字列の表し方については大体お分かりいただけたかと思います。次は文字列を操作する方法です。操作と言うと分かりにくいかもしれませんが、文字列にちょっとした変更を加えることです。一般的なユーザー登録画面を考えてみましょう。
入力欄に入力してもらったユーザーIDをデータベースに保存して、今後のログイン処理で使うことにします。入力してもらったIDをそのまま保存してしまうと使いにくいので、次のような処理をしてみましょう。
- 前後の空白は取り除く
- 11文字以上はエラーにする
- 小文字に変換する
- 「admin」というIDはエラーにする
- 1文字目が「a」でないIDはエラーにする
1. 前後の空白を取り除く
入力欄で間違えて空白を混入してしまう人もいるかもしれません。そういう時に「空白を削除してください」というエラーを出すよりも、自動的に空白を取り除いてあげた方がスマートですよね。trim関数で、文字列の前後の空白を取り除くことができます。
// (1) 変数にIDを入れる(入力欄で入力してもらったつもりで!)
$inputId = ' nogunogu ';
// (2) 前後の空白を取り除いた結果を、別の変数に入れる
$trimId = <span style="color:red;">trim($inputId)</span>;
echo "あなたのIDは「$trimId」です。\n";
あなたのIDは「nogunogu」です。
2. 11文字以上はエラーにする
IDは半角10文字以内という決まりを作り、11文字以上のIDが入力されたら入力エラーにしましょう。HTMLの入力欄で11文字以上入力できないようにもできますが(たとえばinput要素にmaxlength要素を指定したり、JavaScriptを使うなど)、その制限を解除できる人もいるので、PHPでも入力された文字列の長さのチェックが必要です。
strlen関数で、文字列の長さ※を取得することができます。
[※] 正確には文字数ではなくバイト数を取得します。PHPでは半角文字は1文字1バイトなので、半角文字列のバイト数は、文字数と同値になります。
// (1) 変数にIDを入れる(入力欄で入力してもらったつもりで!)
$inputId = ' longnogunogu ';
// (2) 前後の空白を取り除いた結果を、別の変数に入れる
$trimId = trim($inputId);
// (3) 文字列の長さを取得し、変数に入れる
$length = <span style="color:red;">strlen($trimId)</span>;
// (4) 11文字以上の場合
if ($length >= 11) {
// エラー文を表示する
echo "あなたのIDは $length 文字で、長すぎです。\n";
}
if はコードの中で条件分岐をする構文です。() 内の条件に一致した場合のみ、{} 内の行が実行されます。「以上」は「>=」、「より大きい」は「>」を使います。この場合「longnogunogu」は12文字なので、エラー文が表示されます。
あなたのIDは「longnogunogu」です。
あなたのIDは 12 文字で、長すぎです。
(2)と(3)はまとめて書くことができます。
// (2)(3) 前後の空白を取り除いた結果の長さを取得し、変数に入れる
$length = <span style="color:red;">strlen(trim($inputId))</span>;
さらに(4)もまとめて書くことができます。
// (2)(3)(4) 前後の空白を取り除いた結果の長さを取得し、11文字以上ならエラーを表示する
<span style="color:red;">if (strlen(trim($inputId)) >= 11)</span> {
echo "あなたのIDは $length 文字で、長すぎです。\n";
}
ただし、まとめてしまうと変数 $trimId が使えないので、ここでは、まとめずに書くことにします。
3. 小文字に変換する
管理をしやすくするため、IDは小文字限定にしましょう。ただし、大文字を入力されてもエラーにはしないで、PHPで自動的に小文字に変換することにします。
strtolower関数で、文字列のアルファベット部分を小文字に変換することができます。「str(string=文字列)to(~へ)lower(小)」というネーミングです。
// (1) 変数にIDを入れる(入力欄で入力してもらったつもりで!)
$inputId = '<span style="color:red;"> NogunogU </span>';
// (2) 前後の空白を取り除いた結果を、別の変数に入れる
$trimId = trim($inputId);
echo "あなたのIDは「$trimId」です。\n";
// (3) 文字列の長さを取得し、変数に入れる
$length = strlen($trimId);
// (4) 11文字以上の場合
if ($length >= 11) {
// エラー文を表示する
echo "あなたのIDは $length 文字で、長すぎです。\n";
}
// (5) IDを小文字に変換した結果を、別の変数に入れる
$lowerId = <span style="color:red;">strtolower($trimId)</span>;
echo "あなたのIDは「$lowerId」です。\n";
あなたのIDは「nogunogu」です。
もちろん大文字に変換する関数もありますよ。あまり出番はありませんが、strtoupperです。
4. 「admin」というIDはエラーにする
IDの禁止ワードを用意してみましょう。「admin」というIDは登録できないようにします。
strcasecmp関数は2つの文字列を大文字小文字の区別なしで比較し、等しいときは 0 を返します。「str(string=文字列)case(大文字小文字)cmp(compare=比較)」というネーミングです。
// (1) 変数にIDを入れる(入力欄で入力してもらったつもりで!)
$inputId = '<span style="color:red;"> Admin </span>';
// (2) 前後の空白を取り除いた結果を、別の変数に入れる
$trimId = trim($inputId);
// (3) 文字列の長さを取得し、変数に入れる
$length = strlen($trimId);
// (4) 11文字以上の場合
if ($length >= 11) {
// エラー文を表示する
echo "あなたのIDは $length 文字で、長すぎです。\n";
}
// (5) IDがadmin(大文字小文字は区別しない)の場合
if (<span style="color:red;">strcasecmp($trimId, 'admin')</span> === 0) {
// エラー文を表示する
echo "IDに「admin」を使うことはできません。\n";
}
// (6) IDを小文字に変換した結果を、別の変数に入れる
$lowerId = strtolower($trimId);
echo "あなたのIDは「$lowerId」です。\n";
IDに「admin」を使うことはできません。
あなたのIDは「admin」です。
5. 1文字目が「a」でないIDはエラーにする
IDの1文字目は「a」にするという決まりを作ってみましょう。substr関数は、文字列の中の指定した位置に当てはまる文字列を教えてくれます。substr(文字列, スタート位置, 取得バイト数) と書きます。スタート位置は 0 から数えます。substr は substring(従属文字列)の略です。
// (1) 変数にIDを入れる(入力欄で入力してもらったつもりで!)
$inputId = ' nogunogu ';
// (2) 前後の空白を取り除いた結果を、別の変数に入れる
$trimId = trim($inputId);
// (3) 文字列の長さを取得し、変数に入れる
$length = strlen($trimId);
// (4) 11文字以上の場合
if ($length >= 11) {
// エラー文を表示する
echo "あなたのIDは $length 文字で、長すぎです。\n";
}
// (5) IDがadmin(大文字小文字は区別しない)の場合
if (strcasecmp($trimId, 'admin') === 0) {
// エラー文を表示する
echo "IDに「admin」を使うことはできません。\n";
}
// (6) IDを小文字に変換した結果を、別の変数に入れる
$lowerId = strtolower($trimId);
// (7) IDの先頭1文字を取得し、別の変数に入れる
$firstLetter = <span style="color:red;">substr($lowerId, 0, 1)</span>;
// (8) 取得した文字が「a」でない場合
if ($firstLetter !== 'a') {
// エラー文を表示する
echo "IDは「a」から始めてください。\n";
}
echo "あなたのIDは「$lowerId」です。\n";
IDは「a」から始めてください。
あなたのIDは「nogunogu」です。
以上でIDに対する文字列操作はおしまいです。ここに出た例はほんの一部ですし、開発者から見たらリアリティがなかったり、簡略化しすぎたりしているものもあります。ですが、IDひとつを取っても、裏ではいろいろな文字列の操作をしていることが、何となくお分かりいただけたでしょうか。
今回は、文字列がどのようなものか、そして簡単な文字列の操作についてお話しました。次回はもっと複雑な文字列の操作と、数値について取り上げたいと思います。
それではまた~。よい開発ライフを!