文字列が数字・英字・英数字か判定する方法【JavaScript/Python完全ガイド】

 

プログラミングにおいて、文字列の内容が数字のみ、英字のみ、または英数字かを判定することは、バリデーション処理でよく必要とされます。この記事では、JavaScriptとPythonで文字列の種類を効率的に判定する方法を解説します。

JavaScript での文字列判定

数字判定

function isNumeric(str) {
  return /^\d+$/.test(str);
}

function isNumber(str) {
  return !isNaN(str) && !isNaN(parseFloat(str));
}

// 使用例
console.log(isNumeric("123"));    // true
console.log(isNumeric("12.3"));   // false(小数点があるため)
console.log(isNumber("12.3"));    // true(数値として有効)

英字判定

function isAlpha(str) {
  return /^[a-zA-Z]+$/.test(str);
}

function isAlphaLower(str) {
  return /^[a-z]+$/.test(str);
}

function isAlphaUpper(str) {
  return /^[A-Z]+$/.test(str);
}

// 使用例
console.log(isAlpha("Hello"));      // true
console.log(isAlphaLower("hello")); // true
console.log(isAlphaUpper("HELLO")); // true

英数字判定

function isAlphaNumeric(str) {
  return /^[a-zA-Z0-9]+$/.test(str);
}

// 使用例
console.log(isAlphaNumeric("Hello123")); // true
console.log(isAlphaNumeric("Hello-123")); // false(ハイフンがあるため)

Python での文字列判定

標準メソッドを使用

# 数字判定
def is_numeric(s):
    return s.isdigit()

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

# 英字判定
def is_alpha(s):
    return s.isalpha()

# 英数字判定
def is_alphanumeric(s):
    return s.isalnum()

# 使用例
print(is_numeric("123"))          # True
print(is_alpha("Hello"))          # True
print(is_alphanumeric("Hello123")) # True

正規表現を使用

import re

def is_numeric_regex(s):
    return bool(re.match(r'^\d+$', s))

def is_alpha_regex(s):
    return bool(re.match(r'^[a-zA-Z]+$', s))

def is_alphanumeric_regex(s):
    return bool(re.match(r'^[a-zA-Z0-9]+$', s))

包括的な文字列判定クラス

JavaScript版

class StringValidator {
  static isDigits(str) {
    return /^\d+$/.test(str);
  }
  
  static isFloat(str) {
    return /^\d+\.\d+$/.test(str);
  }
  
  static isInteger(str) {
    return /^-?\d+$/.test(str);
  }
  
  static isAlpha(str) {
    return /^[a-zA-Z]+$/.test(str);
  }
  
  static isAlphaNumeric(str) {
    return /^[a-zA-Z0-9]+$/.test(str);
  }
  
  static isEmpty(str) {
    return str.trim().length === 0;
  }
}

Python版

import re

class StringValidator:
    @staticmethod
    def is_digits(s):
        return s.isdigit()
    
    @staticmethod
    def is_float(s):
        return bool(re.match(r'^\d+\.\d+$', s))
    
    @staticmethod
    def is_integer(s):
        return bool(re.match(r'^-?\d+$', s))
    
    @staticmethod
    def is_alpha(s):
        return s.isalpha()
    
    @staticmethod
    def is_alphanumeric(s):
        return s.isalnum()
    
    @staticmethod
    def is_empty(s):
        return len(s.strip()) == 0

より詳細な判定パターン

特殊な数値形式の判定

// JavaScript
function isHexadecimal(str) {
  return /^[0-9a-fA-F]+$/.test(str);
}

function isBinary(str) {
  return /^[01]+$/.test(str);
}

function isOctal(str) {
  return /^[0-7]+$/.test(str);
}
# Python
def is_hexadecimal(s):
    return bool(re.match(r'^[0-9a-fA-F]+$', s))

def is_binary(s):
    return bool(re.match(r'^[01]+$', s))

def is_octal(s):
    return bool(re.match(r'^[0-7]+$', s))

Unicode文字を含む判定

// JavaScript(Unicode対応)
function isAlphaUnicode(str) {
  return /^[\p{L}]+$/u.test(str);
}

function isAlphaNumericUnicode(str) {
  return /^[\p{L}\p{N}]+$/u.test(str);
}
# Python(Unicode対応)
def is_alpha_unicode(s):
    return s.isalpha()  # Pythonの isalpha() はデフォルトでUnicode対応

def is_alphanumeric_unicode(s):
    return s.isalnum()  # Pythonの isalnum() はデフォルトでUnicode対応

実用的な使用例

フォームバリデーション

function validateUserInput(input, type) {
  switch(type) {
    case 'numeric':
      return StringValidator.isDigits(input);
    case 'alpha':
      return StringValidator.isAlpha(input);
    case 'alphanumeric':
      return StringValidator.isAlphaNumeric(input);
    default:
      return false;
  }
}

// 使用例
console.log(validateUserInput("123", "numeric"));      // true
console.log(validateUserInput("ABC123", "alphanumeric")); // true
def validate_user_input(input_str, input_type):
    validators = {
        'numeric': StringValidator.is_digits,
        'alpha': StringValidator.is_alpha,
        'alphanumeric': StringValidator.is_alphanumeric
    }
    
    validator = validators.get(input_type)
    return validator(input_str) if validator else False

# 使用例
print(validate_user_input("123", "numeric"))      # True
print(validate_user_input("ABC123", "alphanumeric")) # True

パフォーマンス比較

JavaScript

// 正規表現 vs 内蔵メソッド
function isNumericBuiltIn(str) {
  return !isNaN(str) && !isNaN(parseFloat(str));
}

function isNumericRegex(str) {
  return /^\d+$/.test(str);
}

// 一般的に正規表現の方が高速

Python

# 内蔵メソッド vs 正規表現
def is_numeric_builtin(s):
    return s.isdigit()

def is_numeric_regex(s):
    return bool(re.match(r'^\d+$', s))

# Pythonでは内蔵メソッドの方が高速

まとめ

文字列の種類判定は、正規表現や言語の内蔵メソッドを使用することで簡単に実装できます。パフォーマンスを重視する場合は、JavaScriptでは正規表現、Pythonでは内蔵メソッドを選択するのが効果的です。用途に応じて適切な判定方法を選択し、堅牢なバリデーション機能を実装しましょう。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座