DjangoのSerializerのフィールドには「trim_whitespace」というオプションがある。
削除してくれるのは「whitespace」=「空白」=「スペースだけ」だと思っていたが、「改行」も削除されたので調べてみた。
その結果、「空白」=「スペースだけ」というのは盛大に間違っていてた。
1. trim_whitespaceは、空白を削除する
CharField
...省略...
trim_whitespace - If set to True then leading and trailing whitespace is trimmed. Defaults to True.
Serializer fields - Django REST framework
2. trim_whitespaceは、strip()を使っている
引用元 : django-rest-framework/rest_framework/fields.py at master · encode/django-rest-framework · GitHub
class CharField(Field):
# ...省略...
def to_internal_value(self, data):
# ...省略...
value = str(data)
return value.strip() if self.trim_whitespace else value
3. Pythonのstrip()は、引数なしで空白文字を除去する
str.strip([chars])
文字列の先頭および末尾部分を除去したコピーを返します。引数 chars は除去される文字集合を指定する文字列です。 chars が省略されるか None の場合、空白文字が除去されます。 chars 文字列は接頭語でも接尾語でもなく、そこに含まれる文字の組み合わせ全てがはぎ取られます:
組み込み型 — Python 3.12.4 ドキュメント
4. 空白には「タブ」「改行」なども含まれていた
空白とは?はisspace()で確認でき、その説明には「タブ」「改行」が含まれると書いてあった。
bytes.isspace()
bytearray.isspace()
シーケンスが空でなく、かつ全てのバイト値が ASCII 空白文字である場合は True を、そうでなければ False を返します。ここでの ASCII 空白文字とはシーケンスb' \t\n\r\x0b\f'
に含まれるバイト値です (半角スペース、タブ、ラインフィード、キャリッジリターン、垂直タブ、フォームフィード) 。
組み込み型 — Python 3.14.0a0 ドキュメント
5. 正規表現でも\s
は「改行」を含む
\s
Unicode (str) パターンでは:
Unicode 空白文字 (これは [ \t\n\r\f\v] その他多くの文字、例えば多くの言語におけるタイポグラフィ規則で定義されたノーブレークスペースなどを含みます) にマッチします。
re --- 正規表現操作 — Python 3.12.4 ドキュメント