1. はじめに
久しぶりにPythonを触ったため、復習も兼ねて基本的な入力チェックを実装してみた。
入力チェックは、ユーザーが入力したデータがルールに沿った値かどうかを確認するために利用されます。
今回は、必須チェックや文字数チェックなど、基本的な入力チェックを関数化しながら実装していきます。
2. 基本的な入力チェックを関数化する
1. 必須チェック
ユーザー名やメールアドレスなど、入力を必須にしたい場合があります。
今回は、「ユーザー名が入力されているか」を確認する必須チェックを実装します。
実装例
validate_required() は、入力値が存在するかを確認する関数です。
strip() は、文字列の先頭と末尾の空白文字(スペースや改行など)を取り除く文字列メソッドです。これにより、空白だけが入力された場合も未入力として判定できます。
# 必須チェック関数
def validate_required(value):
# 値が入力されていない場合
if value is None:
return False
# 空文字や空白のみの場合
if value.strip() == "":
return False
return True
# ユーザー名
username = "seki"
# 必須チェック関数の呼び出し
if validate_required(username):
print(f"ユーザー名:{username}")
else:
print("ユーザー名を入力してください")
実行結果:
ユーザー名:seki
ユーザー名がNone、空文字、空白のみの場合は入力チェックに失敗します。
# ユーザー名
username = ""
# 必須チェック関数の呼び出し
if validate_required(username):
print(f"ユーザー名:{username}")
else:
print("ユーザー名を入力してください")
実行結果:
ユーザー名を入力してください
2. 文字数チェック
ユーザー名やパスワードなど、入力できる文字数を制限したい場合があります。
今回は、「ユーザー名が3文字以上10文字以内か」を確認する文字数チェックを実装します。
実装例
validate_length() は、入力値が指定した文字数の範囲内かを確認する関数です。
len() は、文字列の文字数を取得する関数です。
# 文字数チェック関数
def validate_length(value, min_length, max_length):
# 指定した文字数より小さい場合
if len(value) < min_length:
return False
# 指定した文字数より大きい場合
if len(value) > max_length:
return False
return True
# ユーザー名の文字数制限
USER_NAME_MIN_LENGTH = 3
USER_NAME_MAX_LENGTH = 10
# ユーザー名
username = "seki"
# 文字数チェック関数の呼び出し
if validate_length(username, USER_NAME_MIN_LENGTH, USER_NAME_MAX_LENGTH):
print(f"ユーザー名:{username}")
else:
print(f"ユーザー名は{USER_NAME_MIN_LENGTH}文字以上{USER_NAME_MAX_LENGTH}文字以内で入力してください")
実行結果:
ユーザー名:seki
文字数が範囲外の場合は入力チェックに失敗します。
# ユーザー名
username = "ab"
# 文字数チェック関数の呼び出し
if validate_length(username, USER_NAME_MIN_LENGTH, USER_NAME_MAX_LENGTH):
print(f"ユーザー名:{username}")
else:
print(f"ユーザー名は{USER_NAME_MIN_LENGTH}文字以上{USER_NAME_MAX_LENGTH}文字以内で入力してください")
実行結果:
ユーザー名は3文字以上10文字以内で入力してください
3. 数値チェック
商品の数量や金額など、数値のみ入力を許可したい場合があります。
今回は、「入力された値が数値かどうか」を確認する数値チェックを実装します。
実装例
validate_number() は、入力された値が数値かどうかを確認する関数です。
isinstance() は、指定した値が指定したデータ型のインスタンスかどうかを確認する関数です。
# 数値チェック関数
def validate_number(value):
# 値が数値か確認
if not isinstance(value, (int, float)):
return False
return True
# 数量
quantity = 24
# 数値チェック関数の呼び出し
if validate_number(quantity):
print(f"数量:{quantity}")
else:
print("数値を入力してください")
実行結果:
数量:24
数値以外を入力した場合は入力チェックに失敗します。
# 数量
quantity = "24個"
# 数値チェック関数の呼び出し
if validate_number(quantity):
print(f"数量:{quantity}")
else:
print("数値を入力してください")
実行結果:
数値を入力してください
補足
"24"のような数値の文字列も、isinstance()ではstr型と判定されるため、"24個"と同様にチェックに失敗します。数値文字列を許可したい場合はint()やfloat()への変換を試す方法があります。
4. 数値範囲チェック
年齢や点数など、入力できる数値に制限を設けたい場合があります。
今回は、「入力されたテストの点数が0以上100以下か」を確認する数値範囲チェックを実装します。
実装例
validate_range() は、入力された数値が指定した範囲内かを確認する関数です。
# 数値範囲チェック関数
def validate_range(value, min_value, max_value):
# 指定した範囲より小さい場合
if value < min_value:
return False
# 指定した範囲より大きい場合
if value > max_value:
return False
return True
# テストの点数の範囲
SCORE_MIN = 0
SCORE_MAX = 100
# テストの点数
score = 98
# 数値範囲チェック関数の呼び出し
if validate_range(score, SCORE_MIN, SCORE_MAX):
print(f"テストの点数:{score}")
else:
print(f"{SCORE_MIN}以上{SCORE_MAX}以下で入力してください")
実行結果:
テストの点数:98
範囲外の数値を入力した場合は入力チェックに失敗します。
# テストの点数
score = 110
# 数値範囲チェック関数の呼び出し
if validate_range(score, SCORE_MIN, SCORE_MAX):
print(f"テストの点数:{score}")
else:
print(f"{SCORE_MIN}以上{SCORE_MAX}以下で入力してください")
実行結果:
0以上100以下で入力してください
5. 半角英数字チェック
ユーザーIDやパスワードなど、半角英数字のみ入力を許可したい場合があります。
ユーザーIDには、以下のようなルールを設定することがあります。
- 半角英数字のみ使用できる
- 記号や全角文字を使用できない
今回は、「入力された値が半角英数字のみで構成されているか」を確認する半角英数字チェックを実装します。
実装例
validate_alphanumeric() は、入力された値が半角英数字のみで構成されているかを確認する関数です。
re.fullmatch() は、文字列全体が指定した正規表現パターンと一致するかを確認する関数です。
import re
# 半角英数字チェック関数
def validate_alphanumeric(value):
# 半角英数字のみか確認
if re.fullmatch(r"[a-zA-Z0-9]+", value) is None:
return False
return True
# ユーザーID
user_id = "user123"
# 半角英数字チェック関数の呼び出し
if validate_alphanumeric(user_id):
print(f"ユーザーID:{user_id}")
else:
print("半角英数字で入力してください")
実行結果:
ユーザーID:user123
半角英数字以外が含まれている場合は入力チェックに失敗します。
# ユーザーID
user_id = "user_123"
# 半角英数字チェック関数の呼び出し
if validate_alphanumeric(user_id):
print(f"ユーザーID:{user_id}")
else:
print("半角英数字で入力してください")
実行結果:
半角英数字で入力してください
6. 禁止文字チェック
入力された値に、使用を許可していない文字が含まれていないか確認したい場合があります。
例えば、ユーザー名やコメント欄などでは以下のようなルールを設定することがあります。
- 特定の記号や文字を禁止する
- システム上扱えない文字を禁止する
今回は、指定した禁止文字が入力値に含まれていないかを確認する禁止文字チェックを実装します。
実装例
validate_forbidden_chars() は、入力値に指定した禁止文字が含まれていないかを確認する関数です。
# 禁止文字チェック関数
def validate_forbidden_chars(value, forbidden_chars):
# 禁止文字が含まれているか確認
for char in forbidden_chars:
if char in value:
return False
return True
# 禁止する文字
FORBIDDEN_CHARS = ["<", ">", "&"]
# ユーザー名
username = "seki"
# 禁止文字チェック関数の呼び出し
if validate_forbidden_chars(username, FORBIDDEN_CHARS):
print(f"ユーザー名:{username}")
else:
print("使用できない文字が含まれています")
実行結果:
ユーザー名:seki
禁止文字が含まれている場合は入力チェックに失敗します。
# ユーザー名
username = "se&ki"
# 禁止文字チェック関数の呼び出し
if validate_forbidden_chars(username, FORBIDDEN_CHARS):
print(f"ユーザー名:{username}")
else:
print("使用できない文字が含まれています")
実行結果:
使用できない文字が含まれています
7. 複合チェック
実際のシステムでは、1つの入力項目に対して複数のバリデーションを設定することが一般的です。
例えば、ユーザーIDの場合は以下のようなルールを設定します。
- 入力必須
- 3文字以上10文字以内
- 半角英数字のみ
今回は、これまでに作成したチェック関数を組み合わせて、複合チェックを実装します。
実装例
validate_user_id() は、これまでに作成したチェック関数を組み合わせて、ユーザーIDの入力ルールを確認する関数です。
# ユーザーIDの文字数制限
USER_ID_MIN_LENGTH = 3
USER_ID_MAX_LENGTH = 10
# ユーザーID複合チェック関数
def validate_user_id(value):
# 必須チェック
if not validate_required(value):
return False
# 文字数チェック
if not validate_length(value, USER_ID_MIN_LENGTH, USER_ID_MAX_LENGTH):
return False
# 半角英数字チェック
if not validate_alphanumeric(value):
return False
return True
# ユーザーID
user_id = "user123"
# 複合チェック関数の呼び出し
if validate_user_id(user_id):
print(f"ユーザーID:{user_id}")
else:
print("入力内容を確認してください")
実行結果:
ユーザーID:user123
1つでもチェックに失敗した場合は、Falseが返されます。
# ユーザーID
user_id = "us@"
# 複合チェック関数の呼び出し
if validate_user_id(user_id):
print(f"ユーザーID:{user_id}")
else:
print("入力内容を確認してください")
実行結果:
入力内容を確認してください
このように、入力チェックを関数化しておくことで、複数の入力ルールを組み合わせた処理を簡単に実装できます。
3. まとめ
今回は、Pythonを使って基本的な入力チェックを関数化して実装しました。
入力チェックをそれぞれ関数に分けることで、処理の役割が分かりやすくなり、複数のチェックを組み合わせて利用できることを学びました。
久しぶりにPythonを触りましたが、基本的な文法や関数の作り方を振り返る良い機会になりました。
今後は、エラーメッセージの管理や、より実践的なバリデーション設計についても学んでいきたいと思います。