Yii(PHP)でよく使われる正規表現(Regex)を紹介します。
特に バリデーション や データチェック に使われるパターンを中心にまとめました。
1. 数字関連
目的 | 正規表現 | 説明 |
---|---|---|
数字のみ | /^\d+$/ |
半角数字のみ許可(整数) |
整数(正負含む) | /^-?\d+$/ |
マイナス記号を含む整数 |
小数(正負含む) | /^-?\d+(\.\d+)?$/ |
小数点を含む数値 |
電話番号(ハイフンあり) | /^([0-9-])+$/ |
090-1234-5678 形式 |
電話番号(日本国内、10-11桁) | /^\d{10,11}$/ |
09012345678 形式 |
郵便番号(日本:123-4567) | /^\d{3}-\d{4}$/ |
123-4567 のみ許可 |
2. 文字列関連
目的 | 正規表現 | 説明 |
---|---|---|
半角英字のみ | /^[a-zA-Z]+$/ |
半角英字(大文字・小文字) |
半角英数字のみ | /^[a-zA-Z0-9]+$/ |
半角英数字 |
半角英数字 + 一部記号 | /^[a-zA-Z0-9_-]+$/ |
ハイフン - 、アンダースコア _ を含む |
全角ひらがなのみ | /^[ぁ-んー]+$/u |
ひらがなのみ(ー を含む) |
全角カタカナのみ | /^[ァ-ヶー]+$/u |
カタカナのみ(ー を含む) |
全角日本語(漢字・ひらがな・カタカナ) | /^[一-龠々ぁ-んァ-ヶー]+$/u |
日本語のみ |
氏名(ひらがな・カタカナ・漢字) | /^[ぁ-んァ-ヶ一-龠々ー\s]+$/u |
スペースを含む氏名入力 |
3. メールアドレス
目的 | 正規表現 | 説明 |
---|---|---|
メールアドレス(一般的) | /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ |
test@example.com 形式 |
Yiiでは、メールアドレスのバリデーションは email
ルール を使うのが一般的。
[['mail'], 'email']
4. パスワード
目的 | 正規表現 | 説明 |
---|---|---|
8文字以上の英数字 | /^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8,}$/ |
英字・数字を両方含む8文字以上 |
8文字以上の英数字+記号 | /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[!@#$%^&*])[a-zA-Z\d!@#$%^&*]{8,}$/ |
記号を含む |
大文字・小文字・数字・記号を含む8文字以上 | /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$/ |
強力なパスワード |
5. URL
目的 | 正規表現 | 説明 |
---|---|---|
URL(http/https) | /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ |
http://example.com |
Yiiの url
ルールを使うのが一般的:
[['website'], 'url']
6. 日付・時間
目的 | 正規表現 | 説明 |
---|---|---|
YYYY/MM/DD | /^\d{4}\/\d{2}\/\d{2}$/ |
2024/02/21 形式 |
YYYY-MM-DD | /^\d{4}-\d{2}-\d{2}$/ |
2024-02-21 形式 |
Yiiの date
ルールを使うのが一般的:
[['birth_date'], 'date', 'format' => 'php:Y-m-d']
7. Yiiでの使い方
Yiiの rules()
に正規表現を適用する場合:
public function rules()
{
return [
[['mail'], 'match', 'pattern' => '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', 'message' => 'メールアドレスの形式が正しくありません。'],
[['tel'], 'match', 'pattern' => '/^([0-9-])*$/', 'message' => '電話番号は数字とハイフンのみで入力してください。'],
[['zip_code'], 'match', 'pattern' => '/^\d{3}-\d{4}$/', 'message' => '郵便番号は「123-4567」の形式で入力してください。'],
[['password'], 'match', 'pattern' => '/^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8,}$/', 'message' => 'パスワードは8文字以上で英字と数字を含めてください。'],
];
}
8. まとめ
数字系 → /^\d+$/
(整数)、/^\d{10,11}$/
(電話番号)
文字列系 → /^[ぁ-んー]+$/u
(ひらがな)、/^[ァ-ヶー]+$/u
(カタカナ)
メール → /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
パスワード → /^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8,}$/
(8文字以上の英数字)
日付・時間 → /^\d{4}-\d{2}-\d{2}$/
(YYYY-MM-DD)