PHPで文字列がひらがなであるかを正規表現でチェックする

はじめに

本記事では、PHPで文字列がひらがなであるかを正規表現でチェックする方法について解説します。

基本的なパターン

文字列が1文字以上のひらがなの組み合わせで構成される場合は、以下の正規表現パターンを使用できます。

/^[ぁ-ん]+$/u

踊り字、濁点、半濁点

「ころ」や「みす」など、踊り字を含むひらがなにマッチさせたい場合は、以下のパターンを使用できます。

/^[ぁ-ゞ]+$/u

ただし、このパターンは濁点「」や半濁点「」にもマッチするため、注意が必要です。

Unicodeプロパティエスケープ

」や「」、「」、「」などの特殊なひらがなを含める場合は、Unicodeプロパティエスケープを用いて以下のパターンを使用できます。

/^[\p{Hiragana}]+$/u

長音

「けーき」など長音を含むひらがなにマッチさせたい場合は、以下のパターンを使用できます。

/^[ぁ-んー]+$/u

その他組み合わせ

要件が基本的なパターンに加え長音と踊り文字、「ゕ」と「ゖ」、「ゔ」をひらがなとみなす場合は、以下のパターンを使用できます。

/^[ぁ-んーゝゞゕゖゔ]+$/u

組み合わせによって半角スペースを含むひらがな「/^[ぁ-ん ]+$/u」や数字を含むひらがな「/^[ぁ-ん0-9]+$/u」など様々なパターンに対応できるので、要件にマッチした正規表現を検討してください。

補足

本記事では、UTF-8エンコーディングを前提としています。

使用する正規表現ライブラリによって、パターン修飾子の指定方法などが異なる場合があります。

詳細については、正規表現ライブラリのドキュメントを参照してください。

ひらがなチェックの基本的なパターンで、文字数を指定する正規表現は以下になります。

#マッチさせたい条件正規表現パターン
1すべてひらがなである^[ぁ-ん]+$
2n桁のひらがなである^[ぁ-ん]{n}$
3n桁以上のひらがなである^[ぁ-ん]{n,}$
4m桁以下のひらがなである^[ぁ-ん]{1,m}$
5n桁以上m桁以下のひらがなである^[ぁ-ん]{n,m}$
ひらがなチェックで文字数を指定する正規表現パターン

ソースコード

すべてひらがなであるかをチェックする

/**
 * 文字列がひらがなかチェックします
 * @param string $str 文字列
 * @return bool 文字列がひらがなの場合はtrue、それ以外はfalse
 */
function isHiragana(string $str) {
	return preg_match('/^[ぁ-ん]+$/u', $str);
}

検証

引数の入力

isHiragana("
");

検証結果

n桁のひらがなであるかをチェックする

/**
 * 文字列が指定した桁数のひらがなかチェックします
 * @param string $str 文字列
 * @param int $n 桁数
 * @return bool 文字列が指定した桁数のひらがなの場合はtrue、それ以外はfalse
 */
function isHiraganaFixedLength(string $str, int $n) {
	return preg_match(sprintf('/^[ぁ-ん]{%d}$/u', $n), $str);
}

検証

引数の入力

isHiraganaFixedLength("
",
);

長さは桁数で入力してください。

検証結果

n桁以上のひらがなであるかをチェックする

/**
 * 文字列が最小桁数以上のひらがなかチェックします
 * @param string $str 文字列
 * @param int $n 最小桁数
 * @return bool 文字列が最小桁数以上のひらがなの場合はtrue、それ以外はfalse
 */
function isHiraganaMinLength(string $str, int $n) {
	return preg_match(sprintf('/^[ぁ-ん]{%d,}$/u', $n), $str);
}

検証

引数の入力

isHiraganaMinLength("
",
);

長さは桁数で入力してください。

検証結果

m桁以下のひらがなであるかをチェックする

/**
 * 文字列が最大桁数以下のひらがなかチェックします
 * @param string $str 文字列
 * @param int $m 最大桁数
 * @return bool 文字列が最大桁数以下のひらがなの場合はtrue、それ以外はfalse
 */
function isHiraganaMaxLength(string $str, int $m) {
	return preg_match(sprintf('/^[ぁ-ん]{1,%d}$/u', $m), $str);
}

検証

引数の入力

isHiraganaMaxLength("
",
);

長さは桁数で入力してください。

検証結果

n桁以上m桁以下のひらがなであるかをチェックする

/**
 * 文字列が指定した桁数範囲のひらがなかチェックします
 * @param string $str 文字列
 * @param int $n 最小桁数
 * @param int $m 最大桁数
 * @return bool 文字列が指定した桁数範囲のひらがなの場合はtrue、それ以外はfalse
 */
function isHiraganaInRange(string $str, int $n, int $m) {
	return preg_match(sprintf('/^[ぁ-ん]{%d,%d}$/u', $n, $m), $str);
}

検証

引数の入力

isHiraganaInRange("
",
,
);

長さは桁数で入力してください。

検証結果

Follow me!

photo by:Sigmund