Pythonで文字列の種類を判定する:isalnum, isalpha, isdecimalなどの活用法

ユーザーからの入力を処理する際、「入力された値は数字だけか?」「アルファベットだけで構成されているか?」といったチェック(バリデーション)が必要になることはよくあります。

Pythonの文字列型(str)には、文字列の内容を検査して True または False を返す便利なメソッド群が用意されています。

この記事では、主要な判定メソッドの一覧と、それぞれの具体的な挙動について解説します。

目次

文字列判定メソッド一覧

今回紹介する主なメソッドは以下の通りです。すべて「文字列全体がその条件を満たしているか」を判定します。

メソッド名判定内容Trueになる例Falseになる例
isalnum()英字または数字のみか"abc123""abc-123" (記号)
isalpha()英字のみか"abc""abc1" (数字)
isdecimal()10進数の数字のみか"123""12.3" (小数)
isascii()ASCII文字のみか"abc""あいう" (全角)
isupper()すべて大文字"ABC""Abc"
islower()すべて小文字"abc""Abc"
isspace()すべて空白文字" "" a "

1. 英字・数字・英数字の判定

IDやパスワードの形式チェックなどで頻繁に使用されます。

text_alpha = "Python"
text_num = "12345"
text_alnum = "Python3"
text_symbol = "Python-3"

print(f"--- isalpha (英字のみ) ---")
print(f"'{text_alpha}': {text_alpha.isalpha()}")  # True
print(f"'{text_alnum}': {text_alnum.isalpha()}")  # False (数字含むため)

print(f"\n--- isdecimal (数字のみ) ---")
print(f"'{text_num}': {text_num.isdecimal()}")    # True
print(f"'{text_alnum}': {text_alnum.isdecimal()}")# False (英字含むため)

print(f"\n--- isalnum (英数字のみ) ---")
print(f"'{text_alnum}': {text_alnum.isalnum()}")  # True
print(f"'{text_symbol}': {text_symbol.isalnum()}")# False (ハイフン含むため)

注意点: Python 3の isalpha() は、漢字やひらがな等の「Unicode上の文字」も英字(文字)として扱います("日本語".isalpha()True)。ASCII文字のアルファベットだけに限定したい場合は、isascii() と組み合わせるなどの工夫が必要です。

2. 大文字・小文字の判定

文字列が大文字に統一されているか、小文字に統一されているかを判定します。数字や記号が含まれていても、それらは無視され、アルファベット部分だけで判定されます。

upper_str = "PYTHON 3.10"
lower_str = "python 3.10"
mixed_str = "Python 3.10"

print(f"--- isupper / islower ---")
print(f"'{upper_str}'.isupper(): {upper_str.isupper()}") # True
print(f"'{lower_str}'.islower(): {lower_str.islower()}") # True
print(f"'{mixed_str}'.islower(): {mixed_str.islower()}") # False

3. 空白文字の判定

isspace() は、スペース、タブ(\t)、改行(\n)などが含まれている場合に True を返します。文字が一つでも入っていると False になります。

space_only = "   \t\n"
text_with_space = " a b "

print(f"--- isspace ---")
print(f"'{space_only}': {space_only.isspace()}")      # True
print(f"'{text_with_space}': {text_with_space.isspace()}") # False

実践例:入力チェック関数

これらを組み合わせて、簡易的な入力チェッカーを作成してみます。

def check_password_strength(password):
    if len(password) < 8:
        return "短すぎます"
    if not password.isascii():
        return "半角文字のみ使用可能です"
    if password.isalnum():
        return "記号を1文字以上含めてください"
    if password.islower() or password.isupper():
        return "大文字と小文字を混在させてください"
    
    return "OK"

# テスト
print(check_password_strength("password123")) # 記号なし
print(check_password_strength("Pass-123"))    # OK

まとめ

  • isalnum: 英数字(記号なし)
  • isalpha: 英字のみ
  • isdecimal: 数字のみ(整数)
  • isascii: 半角英数字記号(ASCII文字)
  • isspace: 空白のみ
  • 空文字列 "" に対しては、isascii() 以外はすべて False を返します。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次