ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
Laravel バリデーション
// FormRequest
public function rules()
{
return [
'name' => 'required|string|max:100', // 100 文字以内
'username' => 'required|min:3|max:30', // 3-30 文字
'description' => 'nullable|string|max:500',
'tag' => 'required|size:5', // ちょうど 5 文字
'phone' => 'required|regex:/^[0-9]{10,11}$/', // 10-11 桁の数字
];
}
// コントローラ
$request->validate([
'title' => 'required|max:200',
'content' => 'required|max:65535', // TEXT カラム
]);
// カスタムメッセージ
public function messages()
{
return [
'name.max' => '名前は :max 文字以内で入力してください',
'name.min' => '名前は :min 文字以上で入力してください',
];
}
主要バリデーションルール
| ルール | 意味 |
|---|---|
min:N | 最小 N 文字 (文字列) / 最小値 N (数値) |
max:N | 最大 N 文字 (文字列) / 最大値 N (数値) |
size:N | ちょうど N 文字 |
between:min,max | min 〜 max 文字 |
digits:N | N 桁の数字 |
digits_between:min,max | min 〜 max 桁の数字 |
PHP 標準関数
<?php
// バイト数 (英数字なら文字数と同じ)
strlen("Hello"); // → 5
strlen("こんにちは"); // → 15 (UTF-8 で 3 バイト × 5)
// 文字数 (マルチバイト対応、推奨)
mb_strlen("Hello"); // → 5
mb_strlen("こんにちは"); // → 5
mb_strlen("こんにちは", "UTF-8");
// バイト数を mb_strlen でも取れる
mb_strlen($str, "8bit"); // → strlen と同じ
// よくある誤用
if (strlen($name) > 100) { ... } // ❌ 日本語だと予期しない結果
if (mb_strlen($name) > 100) { ... } // ✅ 正確に文字数
JavaScript での文字列長
// length プロパティ (基本)
"Hello".length; // 5
"こんにちは".length; // 5 (UTF-16 コードユニット数)
"𝄞".length; // 2 (サロゲートペア)
// 正確な文字数 (Unicode コードポイント)
[..."𝄞"].length; // 1
Array.from("𝄞").length; // 1
// バイト数 (UTF-8)
new Blob([str]).size; // 正確な UTF-8 バイト数
new TextEncoder().encode(str).length; // 同上
// 実例
const text = "Hello, 世界! 🌍";
console.log(text.length); // 12
console.log([...text].length); // 11 (絵文字 1 つ)
console.log(new TextEncoder().encode(text).length); // 18 (UTF-8 バイト)
フロント側のリアルタイム文字数表示
<input type="text" id="title" maxlength="100">
<span id="count">0 / 100</span>
<script>
const input = document.getElementById("title");
const count = document.getElementById("count");
input.addEventListener("input", () => {
const len = [...input.value].length; // 正確な文字数
count.textContent = `${len} / 100`;
if (len >= 100) {
count.style.color = "red";
} else if (len >= 80) {
count.style.color = "orange";
} else {
count.style.color = "";
}
});
</script>
<!-- Vue.js -->
<template>
<input v-model="text" maxlength="100">
<span :class="{ 'text-danger': text.length >= 100 }">
{{ text.length }} / 100
</span>
</template>
DB カラム制約
-- VARCHAR(100): 最大 100 文字
CREATE TABLE users (
name VARCHAR(100) NOT NULL
);
-- CHECK 制約 (より厳密、PostgreSQL/SQL Server)
CREATE TABLE users (
name VARCHAR(100) NOT NULL CHECK (CHAR_LENGTH(name) >= 3)
);
-- MySQL でも 8+ で CHECK 制約サポート
CREATE TABLE users (
name VARCHAR(100) NOT NULL CHECK (CHAR_LENGTH(name) BETWEEN 3 AND 100)
);
-- 注意: VARCHAR は「文字数」、CHAR_LENGTH も「文字数」
-- LENGTH() はバイト数 (区別に注意)
UTF-8 ストレージサイズの理解
| 文字種 | UTF-8 バイト数 | 例 |
|---|---|---|
| ASCII (英数字 / 記号) | 1 バイト | A, 0, ! |
| ラテン拡張 (アクセント文字等) | 2 バイト | é, ñ |
| 日本語・中国語・韓国語 | 3 バイト | あ, 漢, 한 |
| 絵文字・補助平面 | 4 バイト | 😀, 🌍 |
MySQL の utf8mb4 文字セット使用時、VARCHAR(100) = 最大 400 バイト。
正規表現での検証
// 半角英数字 5-20 文字
'username' => 'required|regex:/^[a-zA-Z0-9]{5,20}$/'
// 日本語 1-30 文字
'name' => 'required|regex:/^[ぁ-んァ-ヶ一-龯]{1,30}$/u'
// 電話番号 (ハイフン区切り or なし)
'phone' => 'required|regex:/^0\d{1,4}-?\d{1,4}-?\d{4}$/'
// 郵便番号
'zip' => 'required|regex:/^\d{3}-?\d{4}$/'
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?