PHPで文字列が半角英数字記号であるかを正規表現でチェックする
半角英数字記号を正規表現でチェックするには^[ -~]+$
を使用します。この正規表現は「1文字以上の半角英数字記号で構成される文字列」という意味を持ち、「Hello, world!」などの文字列にマッチします。もし半角スペースを除外したい場合は^[!-~]+$
の形式に変更してください。
さらに、固定長の半角英数字記号を指定したい場合は^[ -~]{n}$
、例えば6桁の場合は^[ -~]{6}$
を使用します。同様に、最小桁数や最大桁数を指定することで柔軟なパターンを構築できます。例えば、12桁以上20桁以下に制限したい場合は^[ -~]{12,20}$
が有効です。
以下によく利用される正規表現パターンをまとめました。用途に応じてご活用ください。
# | マッチ条件 | 正規表現パターン |
---|---|---|
1 | すべて半角英数字記号 | ^[ -~]+$ |
2 | 固定長 n桁の半角英数字記号 | ^[ -~]{n}$ |
3 | n桁以上の半角英数字記号 | ^[ -~]{n,}$ |
4 | m桁以下の半角英数字記号 | ^[ -~]{1,m}$ |
5 | n桁以上m桁以下の半角英数字記号 | ^[ -~]{n,m}$ |
ソースコード
次に、入力された文字列が半角英数字記号のみで構成されているかを判定するPHP関数を紹介します。この関数では、以下の条件に応じて検証が可能です。
- 最小桁数を省略した場合: 文字列が指定された最大桁数以内で、半角英数字記号のみで構成されていることを確認します。
- 最大桁数を省略した場合: 文字列が指定された最小桁数以上で、半角英数字記号のみで構成されていることを確認します。
- 最小桁数・最大桁数を省略した場合: 文字列全体が、半角英数字記号のみで構成されていることを確認します。
/**
* 文字列が半角英数字記号のみで構成されるかをチェックします。
*
* この関数は、文字列が指定された範囲内の桁数で構成され、
* 半角英数字および記号(ASCII範囲内: 0x20~0x7E)のみで
* 構成されているかを確認します。
*
* @param string $str 入力文字列
* @param ?int $minLength 最小桁数 (nullの場合は1として扱います)
* @param ?int $maxLength 最大桁数 (nullの場合は文字列の長さを最大値として扱います)
* @return bool 入力文字列が条件を満たす場合はtrue、それ以外はfalseを返します。
* @throws InvalidArgumentException 最小桁数 が 1 未満の場合、または 最大桁数 が 最小桁数 未満の場合に例外が発生します。
*/
function isAlphanumericSymbols(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('/^[ -~]{%d,}$/', (int)$min) // 最大桁数が無制限の場合
: sprintf('/^[ -~]{%d,%d}$/', (int)$min, (int)$max);
// 正規表現によるチェック
return (bool)preg_match($pattern, $str);
}
検証
範囲はバイト数ではなく桁数(文字数)で指定してください。