---
title: "バリデータ"
version: 3.2
locale: ja
source: https://docs.djangoproject.com/ja/3.2/ref/validators/
canonical: https://djangodocs.dev/ja/3.2/ref/validators/
---
# バリデータ

## バリデータを記述する

バリデータは、値を取って 特定の条件に合致しない場合に [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) を返す呼び出し可能オブジェクトです。バリデータは、異なるタイプのフィールド間におけるバリデーションロジックを再利用したいときに役立ちます。

例えば、以下は偶数のみを許容するバリデータです:

```
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _

def validate_even(value):
    if value % 2 != 0:
        raise ValidationError(
            _('%(value)s is not an even number'),
            params={'value': value},
        )
```

これはフィールドの [`validators`](/ja/3.2/ref/models/fields/#django.db.models.Field.validators) 属性を通じて設定することができます:

```
from django.db import models

class MyModel(models.Model):
    even_field = models.IntegerField(validators=[validate_even])
```

値はバリデータ実行前に Python に変換されているため、フォームでも同じバリデータを使用することができます:

```
from django import forms

class MyForm(forms.Form):
    even_field = forms.IntegerField(validators=[validate_even])
```

より複雑なバリデータに対しては、クラスで `__call__()` メソッドを利用することもできます。[`RegexValidator`](#django.core.validators.RegexValidator) はその一例で、このテクニックを使っています。クラスベースのバリデータが [`validators`](/ja/3.2/ref/models/fields/#django.db.models.Field.validators) モデルフィールドのオプション内で使用されるときは、[deconstruct()](/ja/3.2/topics/migrations/#custom-deconstruct-method) と `__eq__()`  メソッドを追加して [移行フレームワークによりシリアライズ可能](/ja/3.2/topics/migrations/#migration-serializing) になるようにしてください。

## バリデータはどのように実行されるか

バリデータが実行される方法については、フォーム上での実行は [フォームのバリデーション](/ja/3.2/ref/forms/validation/)、モデル上の実行は [オブジェクトを検証する](/ja/3.2/ref/models/instances/#validating-objects) にそれぞれ詳細が記載されています。モデルを save してもバリデータは自動的には呼び出されませんが、[`ModelForm`](/ja/3.2/topics/forms/modelforms/#django.forms.ModelForm) を使用している場合にはフォームに含まれるすべてのフィールドでバリデータを実行することに注意してください。モデルのバリデーションがフォーム上でどのように動作するかについては、[ModelForm ドキュメント](/ja/3.2/topics/forms/modelforms/) を参照してください。

## ビルトインのバリデータ

[`django.core.validators`](#module-django.core.validators) モジュールは、モデルやフォームで使用する呼び出し可能なバリデータの集まりを有しています。これらは内部で使用されますが、作成したフィールドで使用することもできます。 追加で使うことも、`field.clean()` メソッドの代わりに使うことも可能です。

### `RegexValidator`

#### `class RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)`

**パラメータ:** - `regex` -- `None` 以外の場合、[`regex`](#django.core.validators.RegexValidator.regex) をオーバーライドします。正規表現の文字列か、コンパイル済みの正規表現を指定します。
- `message` -- `None` 以外の場合、[`message`](#django.core.validators.RegexValidator.message) をオーバーライドします。
- `code` -- `None` 以外の場合、[`code`](#django.core.validators.RegexValidator.code) をオーバーライドします。
- `inverse_match` -- `None` 以外の場合、[`inverse_match`](#django.core.validators.RegexValidator.inverse_match) をオーバーライドする。
- `flags` -- `None` 以外の場合、[`flags`](#django.core.validators.RegexValidator.flags) をオーバーライドします。指定する場合、[`regex`](#django.core.validators.RegexValidator.regex) は正規表現の文字列にする必要があります。それ以外の場合は [`TypeError`](https://docs.python.org/3/library/exceptions.html#TypeError) が発生します。

A [`RegexValidator`](#django.core.validators.RegexValidator) searches the provided `value` for a given
regular expression with [`re.search()`](https://docs.python.org/3/library/re.html#re.search). By default, raises a
[`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) with [`message`](#django.core.validators.RegexValidator.message) and
[`code`](#django.core.validators.RegexValidator.code) if a match **is not** found. Its behavior can be inverted by
setting [`inverse_match`](#django.core.validators.RegexValidator.inverse_match) to `True`, in which case the
[`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) is raised when a match
**is** found.

#### `regex`

The regular expression pattern to search for within the provided
`value`, using [`re.search()`](https://docs.python.org/3/library/re.html#re.search). This may be a string or a
pre-compiled regular expression created with [`re.compile()`](https://docs.python.org/3/library/re.html#re.compile).
Defaults to the empty string, which will be found in every possible
`value`.

#### `message`

バリデーションが失敗した場合に [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) で使用されるエラーメッセージです。デフォルトは `"Enter a valid value"` です。

#### `code`

バリデーションが失敗した場合に [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) で使用されるエラーコードです。デフォルトは `"invalid"` です。

#### `inverse_match`

[`regex`](#django.core.validators.RegexValidator.regex) に対する match モードです。デフォルトは `False` です。

#### `flags`

The [regex flags](https://docs.python.org/3/library/re.html#contents-of-module-re) used when
compiling the regular expression string [`regex`](#django.core.validators.RegexValidator.regex). If [`regex`](#django.core.validators.RegexValidator.regex)
is a pre-compiled regular expression, and [`flags`](#django.core.validators.RegexValidator.flags) is overridden,
[`TypeError`](https://docs.python.org/3/library/exceptions.html#TypeError) is raised. Defaults to `0`.

### `EmailValidator`

#### `class EmailValidator(message=None, code=None, allowlist=None)`

**パラメータ:** - `message` -- `None` 以外の場合、[`message`](#django.core.validators.EmailValidator.message) をオーバーライドします。
- `code` -- `None` 以外の場合、[`code`](#django.core.validators.EmailValidator.code) をオーバーライドします。
- `allowlist` -- If not `None`, overrides [`allowlist`](#django.core.validators.EmailValidator.allowlist).

An [`EmailValidator`](#django.core.validators.EmailValidator) ensures that a value looks like an email, and
raises a [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) with
[`message`](#django.core.validators.EmailValidator.message) and [`code`](#django.core.validators.EmailValidator.code) if it doesn't. Values longer than 320
characters are always considered invalid.

#### `message`

The error message used by
[`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) if validation fails.
Defaults to `"Enter a valid email address"`.

#### `code`

バリデーションが失敗した場合に [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) で使用されるエラーコードです。デフォルトは `"invalid"` です。

#### `allowlist`

Allowlist of email domains. By default, a regular expression (the
`domain_regex` attribute) is used to validate whatever appears after
the `@` sign. However, if that string appears in the `allowlist`,
this validation is bypassed. If not provided, the default `allowlist`
is `['localhost']`. Other domains that don't contain a dot won't pass
validation, so you'd need to add them to the `allowlist` as
necessary.

> **Deprecated since Django 3.2**
>
> バージョン 3.2 で非推奨: The `whitelist` parameter is deprecated. Use [`allowlist`](#django.core.validators.EmailValidator.allowlist)
> instead.
> The undocumented `domain_whitelist` attribute is deprecated. Use
> `domain_allowlist` instead.

> **Changed in Django 3.2.20**
>
> In older versions, values longer than 320 characters could be
> considered valid.

### `URLValidator`

#### `class URLValidator(schemes=None, regex=None, message=None, code=None)`

A [`RegexValidator`](#django.core.validators.RegexValidator) subclass that ensures a value looks like a URL,
and raises an error code of `'invalid'` if it doesn't. Values longer than
[`max_length`](#django.core.validators.URLValidator.max_length) characters are always considered invalid.

Loopback addresses and reserved IP spaces are considered valid. Literal
IPv6 addresses ([**RFC 3986 Section 3.2.2**](https://datatracker.ietf.org/doc/html/rfc3986.html#section-3.2.2)) and Unicode domains are both
supported.

In addition to the optional arguments of its parent [`RegexValidator`](#django.core.validators.RegexValidator)
class, `URLValidator` accepts an extra optional attribute:

#### `schemes`

URL/URI scheme list to validate against. If not provided, the default
list is `['http', 'https', 'ftp', 'ftps']`. As a reference, the IANA
website provides a full list of [valid URI schemes](https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml).

#### `max_length`

> **New in Django 3.2.20**

The maximum length of values that could be considered valid. Defaults
to 2048 characters.

> **Changed in Django 3.2.20**
>
> In older versions, values longer than 2048 characters could be
> considered valid.

### `validate_email`

#### `validate_email`

An [`EmailValidator`](#django.core.validators.EmailValidator) instance without any customizations.

### `validate_slug`

#### `validate_slug`

A [`RegexValidator`](#django.core.validators.RegexValidator) instance that ensures a value consists of only
letters, numbers, underscores or hyphens.

### `validate_unicode_slug`

#### `validate_unicode_slug`

A [`RegexValidator`](#django.core.validators.RegexValidator) instance that ensures a value consists of only
Unicode letters, numbers, underscores, or hyphens.

### `validate_ipv4_address`

#### `validate_ipv4_address`

A [`RegexValidator`](#django.core.validators.RegexValidator) instance that ensures a value looks like an IPv4
address.

### `validate_ipv6_address`

#### `validate_ipv6_address`

Uses `django.utils.ipv6` to check the validity of an IPv6 address.

### `validate_ipv46_address`

#### `validate_ipv46_address`

Uses both `validate_ipv4_address` and `validate_ipv6_address` to
ensure a value is either a valid IPv4 or IPv6 address.

### `validate_comma_separated_integer_list`

#### `validate_comma_separated_integer_list`

A [`RegexValidator`](#django.core.validators.RegexValidator) instance that ensures a value is a
comma-separated list of integers.

### `int_list_validator`

#### `int_list_validator(sep=',', message=None, code='invalid', allow_negative=False)`

Returns a [`RegexValidator`](#django.core.validators.RegexValidator) instance that ensures a string consists
of integers separated by `sep`. It allows negative integers when
`allow_negative` is `True`.

### `MaxValueValidator`

#### `class MaxValueValidator(limit_value, message=None)`

Raises a [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) with a code of
`'max_value'` if `value` is greater than `limit_value`, which may be
a callable.

### `MinValueValidator`

#### `class MinValueValidator(limit_value, message=None)`

Raises a [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) with a code of
`'min_value'` if `value` is less than `limit_value`, which may be a
callable.

### `MaxLengthValidator`

#### `class MaxLengthValidator(limit_value, message=None)`

Raises a [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) with a code of
`'max_length'` if the length of `value` is greater than
`limit_value`, which may be a callable.

### `MinLengthValidator`

#### `class MinLengthValidator(limit_value, message=None)`

Raises a [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) with a code of
`'min_length'` if the length of `value` is less than `limit_value`,
which may be a callable.

### `DecimalValidator`

#### `class DecimalValidator(max_digits, decimal_places)`

Raises [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) with the following
codes:

- `'max_digits'` if the number of digits is larger than `max_digits`.
- `'max_decimal_places'` if the number of decimals is larger than
  `decimal_places`.
- `'max_whole_digits'` if the number of whole digits is larger than
  the difference between `max_digits` and `decimal_places`.

### `FileExtensionValidator`

#### `class FileExtensionValidator(allowed_extensions, message, code)`

Raises a [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) with a code of
`'invalid_extension'` if the extension of `value.name` (`value` is
a [`File`](/ja/3.2/ref/files/file/#django.core.files.File)) isn't found in `allowed_extensions`.
The extension is compared case-insensitively with `allowed_extensions`.

> **Warning**
>
> Don't rely on validation of the file extension to determine a file's
> type. Files can be renamed to have any extension no matter what data
> they contain.

### `validate_image_file_extension`

#### `validate_image_file_extension`

Uses Pillow to ensure that `value.name` (`value` is a
[`File`](/ja/3.2/ref/files/file/#django.core.files.File)) has [a valid image extension](https://pillow.readthedocs.io/en/latest/handbook/image-file-formats.html).

### `ProhibitNullCharactersValidator`

#### `class ProhibitNullCharactersValidator(message=None, code=None)`

Raises a [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) if `str(value)`
contains one or more nulls characters (`'\x00'`).

**パラメータ:** - `message` -- `None` 以外の場合、[`message`](#django.core.validators.ProhibitNullCharactersValidator.message) をオーバーライドします。
- `code` -- `None` 以外の場合、[`code`](#django.core.validators.ProhibitNullCharactersValidator.code) をオーバーライドします。

#### `message`

The error message used by
[`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError) if validation fails.
Defaults to `"Null characters are not allowed."`.

#### `code`

The error code used by [`ValidationError`](/ja/3.2/ref/exceptions/#django.core.exceptions.ValidationError)
if validation fails. Defaults to `"null_characters_not_allowed"`.
