Laravel バリデーションのメモ


```php:         
        Validator::extend('kana', function ($attribute, $value, $parameters) {
            if (mb_strlen($value) > 100) {
                return false;
            }

            if (preg_match('/[^ぁ-んー]/u', $value) !== 0) {
                return false;
            }

            return true;
        });
```
```php:
        Validator::extend('url', function ($attribute, $value, $parameters) {
            return(preg_match("/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/", $value));
        });
```
```php:
        Validator::extend('alpha_number', function ($attribute, $value, $parameters) {
            return(preg_match("/^[\w-]*$/", $value));
        });
```
```php:
        Validator::extend('env_dep', function ($attribute, $value, $parameters) {
            $pass = false;
            foreach (preg_split('//u', $value, -1, PREG_SPLIT_NO_EMPTY) as $s) {
                $pass = (strlen($s) == strlen(mb_convert_encoding(mb_convert_encoding($s, 'SJIS', 'UTF-8'), 'UTF-8', 'SJIS'))) ? true : false;
            }
            return $pass;
        });
```
```php:半角英数字
        Validator::extend('half_width_alpha_numeric', function ($attribute, $value, $parameters, $validator) {
            if (is_null($value))
                return true;
            return(preg_match("/^[a-zA-Z0-9]+$/u", $value));
        });
```
```php:半角英数字、半角ハイフン
        Validator::extend('half_width_alpha_numeric_hyphen', function ($attribute, $value, $parameters, $validator) {
            if (is_null($value))
                return true;
            return(preg_match("/^[a-zA-Z0-9\-]+$/u", $value));
        });
```
```php:全角（ひらがな、カタカナ、漢字）
        Validator::extend('kanji_katakana_hiragana', function ($attribute, $value, $parameters, $validator) {
            if (is_null($value))
                return true;
            return(preg_match("/^[ぁ-んァ-ヶ一-龥々]+$/u", $value));
        });
```php:全角ひらがな
        Validator::extend('hiragana', function ($attribute, $value, $parameters, $validator) {
            if (is_null($value))
                return true;
            return(preg_match("/^[ぁ-ん]+$/u", $value));
        });
```
```php:全角（ひらがな、カタカナ、漢字、数字、英字、ハイフン全角、中黒、全角シングルクオート、＠全角）
        Validator::extend('full_width', function ($attribute, $value, $parameters, $validator) {
            if (is_null($value))
                return true;
            return(preg_match("/^[ぁ-んァ-ヶ一-龥々０-９ａ-ｚＡ-Ｚー・’＠]+$/u", $value));
        });
```
```php:全角（ひらがな、カタカナ、漢字、数字、英字、全角ハイフン、中黒）、半角英数字、半角ハイフン
        Validator::extend('not_half_width_kana_symbol', function ($attribute, $value, $parameters, $validator) {
            if (is_null($value))
                return true;
            return(preg_match("/^[ぁ-んァ-ヶ一-龥々０-９ａ-ｚＡ-Ｚー・a-zA-Z0-9\-]+$/u", $value));
        });
```
```php:半角英数記号
        Validator::extend('half_width_alpha_numeric_symbol', function ($attribute, $value, $parameters, $validator) {
            if (is_null($value))
                return true;
            return(preg_match("/^[!-~]+$/", $value));
        });
```
```php:電話番号（任意入力）
        // 入力値にNULLまたは半角数字でない値が混在している場合、バリデーションエラー
        Validator::extend('optional_phone_no', function ($attribute, $value, $parameters, $validator) {
            // null check
            $null_count = 0;
            foreach ($value as $v) {
                if (is_null($v))
                    $null_count++;
            }
            // 全てNULLだった場合、バリデーションを行わない
            if ($null_count === 3)
                return true;

            // validate check
            $validate_ok_count = 0;
            foreach ($value as $v) {
                if (!is_null($v)) {
                    if (preg_match("/^[0-9]+$/u", $v)) {
                        $validate_ok_count++;
                    }
                }
            }
            // 全て半角数字だった場合、バリデーションOK
            if ($validate_ok_count === 3)
                return true;

            return false;
        });
```
```php:配列の要素を文字列結合し、その文字列が指定された文字列長以下であること
        Validator::extend('max_implode_array', function ($attribute, $value, $parameters, $validator) {
            $max_len = (int) $parameters[0];
            if (mb_strlen(implode('', $value)) > $max_len) {
                return false;
            }
            return true;
        });
```
```php:電話番号（必須）
        Validator::extend('phone_no', function ($attribute, $value, $parameters, $validator) {
            // null check
            $null_count = 0;
            foreach ($value as $v) {
                if (is_null($v)) {
                    $null_count++;
                }
            }
            // NULLがあった場合、バリデーションエラー
            if ($null_count > 0) {
                return false;
            }

            // 半角数字でバリデーション
            $validate_ok_count = 0;
            foreach ($value as $v) {
                if (!is_null($v)) {
                    if (preg_match("/^[0-9]+$/u", $v)) {
                        $validate_ok_count++;
                    }
                }
            }
            // 全て半角数字だった場合、バリデーションOK
            if ($validate_ok_count === 3) {
                return true;
            }
            return false;
        });
```
<br>
####半角英数字記号・全角英数字かなカナ記号の一覧
　https://qiita.com/sta/items/848e7a8c4699a59c604f