PHPで文字列が半角英数字であるかを正規表現でチェックする
半角英数字を正規表現でチェックするには^[a-zA-Z0-9]+$
を使用します。この正規表現は「1文字以上の半角英数字で構成される文字列」という意味を持ち、3DModel などの文字列にマッチします。
さらに、固定長の半角英数字を指定したい場合は^[a-zA-Z0-9]{n}$
、例えば6桁の場合は^[a-zA-Z0-9]{6}$
を使用します。同様に、最小桁数や最大桁数を指定することで柔軟なパターンを構築できます。例えば、12桁以上20桁以下に制限したい場合は^[a-zA-Z0-9]{12,20}$
が有効です。
以下によく利用される正規表現パターンをまとめました。用途に応じてご活用ください。
# | マッチ条件 | 正規表現パターン |
---|---|---|
1 | すべて半角英数字 | ^[a-zA-Z0-9]+$ |
2 | 固定長 n桁の半角英数字 | ^[a-zA-Z0-9]{n}$ |
3 | n桁以上の半角英数字 | ^[a-zA-Z0-9]{n,}$ |
4 | m桁以下の半角英数字 | ^[a-zA-Z0-9]{1,m}$ |
5 | n桁以上m桁以下の半角英数字 | ^[a-zA-Z0-9]{n,m}$ |
ソースコード
次に、入力された文字列が半角英数字のみで構成されているかを判定するPHP関数を紹介します。この関数では、以下の条件に応じて検証が可能です。
- 最小桁数を省略した場合: 文字列が指定された最大桁数以内で、半角英数字のみで構成されていることを確認します。
- 最大桁数を省略した場合: 文字列が指定された最小桁数以上で、半角英数字のみで構成されていることを確認します。
- 最小桁数・最大桁数を省略した場合: 文字列全体が、半角英数字のみで構成されていることを確認します。
/**
* 文字列が半角英数字のみで構成されるかをチェックします。
*
* @param string $str 入力文字列
* @param ?int $minLength 最小桁数 (nullの場合は1として扱います)
* @param ?int $maxLength 最大桁数 (nullの場合は文字列の長さを最大値として扱います)
* @return bool 入力文字列が条件を満たす場合はtrue、それ以外はfalseを返します。
* @throws InvalidArgumentException 最小桁数 が 1 未満の場合、または 最大桁数 が 最小桁数 未満の場合に例外が発生します。
*/
function isAlphanumeric(string $str, ?int $minLength = null, ?int $maxLength = null): bool {
// デフォルト値を設定
$min = $minLength ?? 1;
$max = $maxLength ?? mb_strlen($str);
// 引数のバリデーション
if ($min < 1) {
// 最小桁数が1未満の場合に例外をスロー
throw new InvalidArgumentException('最小桁数は1以上の整数である必要があります。');
}
if (!is_null($maxLength) && $max < $min) {
// 最大桁数が最小桁数未満の場合に例外をスロー
throw new InvalidArgumentException('最小桁数は最大桁数以下である必要があります。');
}
// 半角英数字の正規表現パターンを構築
$pattern = is_null($maxLength)
? sprintf('/^[a-zA-Z0-9]{%d,}$/', (int)$min) // 最大桁数が無制限の場合
: sprintf('/^[a-zA-Z0-9]{%d,%d}$/', (int)$min, (int)$max);
// 正規表現によるチェック
return (bool)preg_match($pattern, $str);
}
検証
範囲はバイト数ではなく桁数(文字数)で指定してください。