今回は、文字フォーマットについてのバリデーションを確認します。
確認するルールはactive_url
、email
、ip
、ipv4
、ipv6
、mac_address
、json
、url
、uuid
、ulid
です。
active_url | URL(アクティブ)
URLであり、ホスト部から有効なAかAAAAレコードが取得できることをチェックします。
$rules = ['parameter' => 'active_url'];
// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // true
// null
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false
// 空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // true
// 半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // false
// 空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false
// URLとして有効
$data = ['parameter' => 'https://webspace.jp'];
Validator::make($data, $rules)->passes(); // true
// URLとして有効
$data = ['parameter' => 'https://webspace.jp/path'];
Validator::make($data, $rules)->passes(); // true
// URLとして有効
$data = ['parameter' => 'https://webspace.jp:80/'];
Validator::make($data, $rules)->passes(); // true
// URLとして有効
$data = ['parameter' => '//webspace.jp'];
Validator::make($data, $rules)->passes(); // true
// ダメな例
$data = ['parameter' => '/webspace.jp'];
Validator::make($data, $rules)->passes(); // false
// ダメな例
$data = ['parameter' => 'webspace.jp'];
Validator::make($data, $rules)->passes(); // false
// 存在しないホスト部
$data = ['parameter' => 'http://username:password@hostname:9090/path?arg=value#anchor'];
Validator::make($data, $rules)->passes(); // false
AもしくはAAAAレコードを取得するため存在しないドメインの場合、DNS取得に時間がかかることがあります。
Laravelでの実装はこちら。
email | メールアドレス
メールアドレスの形式として正しいかをチェックします。
egulias/email-validatorのパッケージを利用してチェックします。
$rules = ['parameter' => 'email'];
// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // true
// null
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false
// 空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // true
// 半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // true
// 空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false
// メールアドレス
$data = ['parameter' => 'hoge@webspace.jp'];
Validator::make($data, $rules)->passes(); // true
// メールアドレス(複数)
$data = ['parameter' => 'hoge@webspace.jp,huga@webspace.jp'];
Validator::make($data, $rules)->passes(); // false
// メールアドレス(名前付き)
$data = ['parameter' => 'hukinotou <hoge@webspace.jp>'];
Validator::make($data, $rules)->passes(); // false
// 文字列
$data = ['parameter' => 'hoge@'];
Validator::make($data, $rules)->passes(); // false
// 文字列
$data = ['parameter' => '@webspace.jp'];
Validator::make($data, $rules)->passes(); // false
メールアドレスのチェックルール
デフォルトではRFCValidation
が適用されます。
パラメータを設定することで、異なるルールでチェックをすることができます。
- rfc: RFCValidation
- strict: NoRFCWarningsValidation
- dns: DNSCheckValidation
- spoof: SpoofCheckValidation
- filter: FilterEmailValidation
- filter_unicode: FilterEmailValidation::unicode()
下記のようにすることで、適用するルールを変更できます。
$rules = ['parameter' => 'email:strict,dns'];
Laravelでの実装はこちら。
ip | IPアドレス
IPアドレスの形式として正しいかをチェックします。
IPv4、IPv6両方に対応しています。filter_var
のFILTER_VALIDATE_IP
の検証フィルタで検査します。
$rules = ['parameter' => 'ip'];
// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // true
// null
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false
// 空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // true
// 半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // true
// 空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false
// IPアドレス(IPv4:ループバックアドレス)
$data = ['parameter' => '127.0.0.1'];
Validator::make($data, $rules)->passes(); // true
// IPアドレス(IPv4)
$data = ['parameter' => '192.0.2.128'];
Validator::make($data, $rules)->passes(); // true
// IPアドレス(IPv6:ループバックアドレス)
$data = ['parameter' => '::1'];
Validator::make($data, $rules)->passes(); // true
// IPアドレス(IPv6:未定義アドレス)
$data = ['parameter' => '::'];
Validator::make($data, $rules)->passes(); // true
// IPアドレス(IPv6)
$data = ['parameter' => '2001:db8:85a3::8a2e:370:7334'];
Validator::make($data, $rules)->passes(); // true
// IPアドレス(IPv4互換アドレス)
$data = ['parameter' => '::ffff:192.0.2.128'];
Validator::make($data, $rules)->passes(); // true
// エラー値(255を超えた値[256])
$data = ['parameter' => '255.255.255.256'];
Validator::make($data, $rules)->passes(); // false
// エラー値(桁不足)
$data = ['parameter' => '240.0.0.'];
Validator::make($data, $rules)->passes(); // false
// エラー値(0xf を超えた値[0xg])
$data = ['parameter' => 'g001:db8:85a3::8a2e:370:7334'];
Validator::make($data, $rules)->passes(); // false
Laravelでの実装はこちら。
ipv4 | IPv4アドレス
IPv4アドレスの形式として正しいかをチェックします。filter_var
のFILTER_VALIDATE_IP
の検証フィルタにFILTER_FLAG_IPV4
フラグを付与して検査します。
サンプルはip | IPアドレスを参考にしてください。
Laravelでの実装はこちら。
ipv6 | IPv6アドレス
IPv6アドレスの形式として正しいかをチェックします。filter_var
のFILTER_VALIDATE_IP
の検証フィルタにFILTER_FLAG_IPV6
フラグを付与して検査します。
サンプルはip | IPアドレスを参考にしてください。
Laravelでの実装はこちら。
mac_address | MACアドレス
MACアドレスの形式として正しいかをチェックします。filter_var
のFILTER_VALIDATE_MAC
の検証フィルタで検査します。
$rules = ['parameter' => 'mac_address'];
// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // true
// null
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false
// 空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // true
// 半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // true
// 空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false
// 有効なMACアドレス(コロンで区切られた6つの16進数(IEEE 802フォーマット))
$data = ['parameter' => '00:00:5e:00:53:00'];
Validator::make($data, $rules)->passes(); // true
// 有効なMACアドレス(ハイフンで区切られた6つの16進数(IEEE 802フォーマット))
$data = ['parameter' => '00-00-5e-00-53-00'];
Validator::make($data, $rules)->passes(); // true
// 有効なMACアドレス(ドットで区切られた4つの16進数(EUI-64フォーマット))
$data = ['parameter' => '0000.5e00.5300'];
Validator::make($data, $rules)->passes(); // true
// エラー値(桁不足)
$data = ['parameter' => '00:00:5e:00:53'];
Validator::make($data, $rules)->passes(); // false
// エラー値(0xf を超えた値[0xg])
$data = ['parameter' => 'g0:00:5e:00:53:00'];
Validator::make($data, $rules)->passes(); // false
Laravelでの実装はこちら。
PHP自体のfilter_var
のFILTER_VALIDATE_MAC
の検証フィルタの実装はこちら。
実装を確認すると、下記の3パターンの時にMACアドレスとしてされます。
- IEEE 802フォーマット:コロンで区切られた6つの16進数
- IEEE 802フォーマット:ハイフンで区切られた6つの16進数
- EUI-64フォーマット:ドットで区切られた4つの16進数
json | JSON形式
JSON形式として正しいかをチェックします。
ざっくり書くと、json_decode
してみて、エラーにならなければOKな感じですね。
$rules = ['parameter' => 'json'];
// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // true
// null
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false
// 空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // true
// 半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // true
// 空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false
// 整数(文字列)
$data = ['parameter' => '3'];
Validator::make($data, $rules)->passes(); // true
// マイナス(文字列)
$data = ['parameter' => '-3'];
Validator::make($data, $rules)->passes(); // true
// プラス(文字列)
$data = ['parameter' => '+3'];
Validator::make($data, $rules)->passes(); // false
// 小数(文字列)
$data = ['parameter' => '1.8'];
Validator::make($data, $rules)->passes(); // true
// 整数
$data = ['parameter' => 3];
Validator::make($data, $rules)->passes(); // true
// マイナス
$data = ['parameter' => -3];
Validator::make($data, $rules)->passes(); // true
// 小数
$data = ['parameter' => 1.8];
Validator::make($data, $rules)->passes(); // true
// bool(true)
$data = ['parameter' => true];
Validator::make($data, $rules)->passes(); // true
// bool(false)
$data = ['parameter' => false];
Validator::make($data, $rules)->passes(); // false
// bool(true)(文字列)
$data = ['parameter' => 'true'];
Validator::make($data, $rules)->passes(); // true
// bool(false)(文字列)
$data = ['parameter' => 'false'];
Validator::make($data, $rules)->passes(); // true
// JSON形式(オブジェクト形式)
$data = ['parameter' => '{"hoge": "huga"}'];
Validator::make($data, $rules)->passes(); // true
// JSON形式(オブジェクト形式)
$data = ['parameter' => '{"hoge": 1}'];
Validator::make($data, $rules)->passes(); // true
// JSON形式(配列形式)
$data = ['parameter' => '["hoge", "huga"]'];
Validator::make($data, $rules)->passes(); // true
// JSON形式(配列形式)
$data = ['parameter' => '[1, 2]'];
Validator::make($data, $rules)->passes(); // true
// エラー値(オブジェクトのキー名が"で囲まれていない)
$data = ['parameter' => '{hoge: "huga"}'];
Validator::make($data, $rules)->passes(); // false
Laravelでの実装はこちら。
url | URL形式
URL形式として正しいかをチェックします。
$rules = ['parameter' => 'url'];
// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // true
// null
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false
// 空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // true
// 半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // true
// 空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false
// 整数(文字列)
$data = ['parameter' => '3'];
Validator::make($data, $rules)->passes(); // false
// マイナス(文字列)
$data = ['parameter' => '-3'];
Validator::make($data, $rules)->passes(); // false
// プラス(文字列)
$data = ['parameter' => '+3'];
Validator::make($data, $rules)->passes(); // false
// 小数(文字列)
$data = ['parameter' => '1.8'];
Validator::make($data, $rules)->passes(); // false
// 整数
$data = ['parameter' => 3];
Validator::make($data, $rules)->passes(); // false
// マイナス
$data = ['parameter' => -3];
Validator::make($data, $rules)->passes(); // false
// 小数
$data = ['parameter' => 1.8];
Validator::make($data, $rules)->passes(); // false
// bool(true)
$data = ['parameter' => true];
Validator::make($data, $rules)->passes(); // false
// bool(false)
$data = ['parameter' => false];
Validator::make($data, $rules)->passes(); // false
// bool(true)(文字列)
$data = ['parameter' => 'true'];
Validator::make($data, $rules)->passes(); // false
// bool(false)(文字列)
$data = ['parameter' => 'false'];
Validator::make($data, $rules)->passes(); // false
// url(ドメインのみ)
$data = ['parameter' => 'https://webspace.jp/'];
Validator::make($data, $rules)->passes(); // true
// url(ドメインのみ:末尾のスラッシュなし)
$data = ['parameter' => 'https://webspace.jp'];
Validator::make($data, $rules)->passes(); // true
// url(Basic認証つき)
$data = ['parameter' => 'https://hoge:huga@webspace.jp/'];
Validator::make($data, $rules)->passes(); // true
// url(ポート番号つき)
$data = ['parameter' => 'https://webspace.jp:443/'];
Validator::make($data, $rules)->passes(); // true
// url(パスつき)
$data = ['parameter' => 'https://webspace.jp/path/'];
Validator::make($data, $rules)->passes(); // true
// url(クエリーパラメーターつき)
$data = ['parameter' => 'https://webspace.jp/?query=piyo'];
Validator::make($data, $rules)->passes(); // true
// url(フラグメントつき)
$data = ['parameter' => 'https://webspace.jp/#hogehoge'];
Validator::make($data, $rules)->passes(); // true
// url(全部つき)
$data = ['parameter' => 'https://hoge:huga@webspace.jp:443/path/?query=piyo#hogehoge'];
Validator::make($data, $rules)->passes(); // true
// url(IPアドレス)
$data = ['parameter' => 'http://127.0.0.1/'];
Validator::make($data, $rules)->passes(); // true
Laravelでの実装はこちら。
uuid | UUID形式
UUID形式として正しいかをチェックします。
A~F、0~9の8桁、4桁、4桁、4桁、12桁のハイフン区切りの正規表現でチェックします。
$rules = ['parameter' => 'uuid'];
// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // true
// null
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false
// 空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // true
// 半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // true
// 空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false
// 整数(文字列)
$data = ['parameter' => '3'];
Validator::make($data, $rules)->passes(); // false
// マイナス(文字列)
$data = ['parameter' => '-3'];
Validator::make($data, $rules)->passes(); // false
// プラス(文字列)
$data = ['parameter' => '+3'];
Validator::make($data, $rules)->passes(); // false
// 小数(文字列)
$data = ['parameter' => '1.8'];
Validator::make($data, $rules)->passes(); // false
// 整数
$data = ['parameter' => 3];
Validator::make($data, $rules)->passes(); // false
// マイナス
$data = ['parameter' => -3];
Validator::make($data, $rules)->passes(); // false
// 小数
$data = ['parameter' => 1.8];
Validator::make($data, $rules)->passes(); // false
// bool(true)
$data = ['parameter' => true];
Validator::make($data, $rules)->passes(); // false
// bool(false)
$data = ['parameter' => false];
Validator::make($data, $rules)->passes(); // false
// bool(true)(文字列)
$data = ['parameter' => 'true'];
Validator::make($data, $rules)->passes(); // false
// bool(false)(文字列)
$data = ['parameter' => 'false'];
Validator::make($data, $rules)->passes(); // false
// UUID(小文字)
$data = ['parameter' => '75e9d34d-15a0-4002-7ae0-95b0ae18d61f'];
Validator::make($data, $rules)->passes(); // true
// UUID(大文字)
$data = ['parameter' => '5664B42E-2747-4C4C-3DC7-236040D7470B'];
Validator::make($data, $rules)->passes(); // true
Laravelでの実装はこちら。
文字列ヘルパの実装はこちら。
ulid | ULID形式
ULID形式として正しいかをチェックします。
$rules = ['parameter' => 'ulid'];
// リクエストにパラメーターが含まれていない
$data = [];
Validator::make($data, $rules)->passes(); // true
// null
$data = ['parameter' => null];
Validator::make($data, $rules)->passes(); // false
// 空文字
$data = ['parameter' => ''];
Validator::make($data, $rules)->passes(); // true
// 半角スペース
$data = ['parameter' => ' '];
Validator::make($data, $rules)->passes(); // true
// 空配列
$data = ['parameter' => []];
Validator::make($data, $rules)->passes(); // false
// 整数(文字列)
$data = ['parameter' => '3'];
Validator::make($data, $rules)->passes(); // false
// マイナス(文字列)
$data = ['parameter' => '-3'];
Validator::make($data, $rules)->passes(); // false
// プラス(文字列)
$data = ['parameter' => '+3'];
Validator::make($data, $rules)->passes(); // false
// 小数(文字列)
$data = ['parameter' => '1.8'];
Validator::make($data, $rules)->passes(); // false
// 整数
$data = ['parameter' => 3];
Validator::make($data, $rules)->passes(); // false
// マイナス
$data = ['parameter' => -3];
Validator::make($data, $rules)->passes(); // false
// 小数
$data = ['parameter' => 1.8];
Validator::make($data, $rules)->passes(); // false
// bool(true)
$data = ['parameter' => true];
Validator::make($data, $rules)->passes(); // false
// bool(false)
$data = ['parameter' => false];
Validator::make($data, $rules)->passes(); // false
// bool(true)(文字列)
$data = ['parameter' => 'true'];
Validator::make($data, $rules)->passes(); // false
// bool(false)(文字列)
$data = ['parameter' => 'false'];
Validator::make($data, $rules)->passes(); // false
// ULID(小文字)
$data = ['parameter' => '01arz3ndektsv4rrffq69g5fav'];
Validator::make($data, $rules)->passes(); // true
// ULID(大文字)
$data = ['parameter' => '01ARZ3NDEKTSV4RRFFQ69G5FAV'];
Validator::make($data, $rules)->passes(); // true
// ULIDっぽい文字列(ULIDにはI, L, Oは利用されない)
$data = ['parameter' => '01ARZ3NDEKTSV4RRFFQ69G5FAL'];
Validator::make($data, $rules)->passes(); // false
Laravelでの実装はこちら。
文字列ヘルパの実装はこちら。
Symfonyでの実装はこちら。
[AD]