文字列が数字・英字・英数字か判定する方法【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爆速講座


