PHP

PHP preg_match() 正規表現で良く使うやつ

PHP

 

数字かどうかの判定

PHPだと関数では数字の判定が困難なので、正規表現で判定する

// 数字かどうかの判定
if (preg_match("/^[0-9]+$/", $target_string)) {
    // trueの処理
}

 

日付 yyyy-mm-ddの判定

 

 

// 日付のフォーマット yyyy-mm-dd の判定
if (preg_match('/\A[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\z/', $target_string)) {
    // trueの処理
}

 

正規表現で値を抽出する

 

// 正規表現で値を抽出する
if (preg_match('/key=(\w.+)&&value=(\w.+)&&option=(\w.+)/u', $item, $match)) {
    // trueの処理

    $key = $match[1];
    $value = $match[2];
    $option = $match[3];
}

 

ファイルの判定 (LaravelのRequest->file()も利用)

拡張子とファイル名を判定

// 選択されたファイルの拡張子を取得する
$file = $request->file('uploadFile);
$extension = $file->getClientOriginalExtension();
//拡張子が.cssであることを確認
if ($extension !== "css") {
    return false;
}
// Laravel Validatorで判定
$array = [
    'file' => $file,
];
$validator = Validator::make($array, [
    'first_name' => [
        'require',
        'file',
        'mimetypes:text/css',
    ],
]);
if ($validator->fails()) {
    // failの処理
}
// ファイル名が「{半角英数}.css」であることを確認。但し「-」「_」は許可
if (!preg_match('/^[-_a-zA-Z0-9]+\.css$/', $file->getClientOriginalName())) {
    return false;
}

 

コンフィグに値があるか判定

Firebaseのコンフィグの例

    /**
     * パラメータが揃っているかバリデーション
     *
     * @param string
     * @return void or Illuminate\Http\JsonResponse
     */
    protected function validateFirebaseConfig(string $firebase_config_plain)
    {
        $api_key = [];
        $project_id = [];
        $app_id = [];
        $measurement_id = [];
        // 足りないキーを格納する配列
        $undefined_data = [
            'title' => null,
            'message' => "パラメーターの値が不正です。",
            'items' => [
                'key' => []
            ]
        ];

        // Firebase連携に必要なキーがあるかをバリデーション
        // パース
        preg_match('/apiKey: "(.+)"/', $firebase_config_plain, $api_key);
        preg_match('/projectId: "(.+)"/', $firebase_config_plain, $project_id);
        preg_match('/appId: "(.+)"/', $firebase_config_plain, $app_id);
        preg_match('/measurementId: "(.+)"/', $firebase_config_plain, $measurement_id);
        // キーが空の場合に足りないキーを教えてあげる
        if (!isset($api_key[self::FIREBASE_CONFIG_KEY_INDEX])) {
            $undefined_data['items']['key'][] = 'apiKey';
        }
        if (!isset($project_id[self::FIREBASE_CONFIG_KEY_INDEX])) {
            $undefined_data['items']['key'][] = 'projectId';
        }
        if (!isset($app_id[self::FIREBASE_CONFIG_KEY_INDEX])) {
            $undefined_data['items']['key'][] = 'appId';
        }
        if (!isset($measurement_id[self::FIREBASE_CONFIG_KEY_INDEX])) {
            $undefined_data['items']['key'][] = 'measurementId';
        }
        // 足りないキーを通知する処理 (異常系)
        if (!empty($undefined_data['items']['key'])) {
            abort(response()->json($undefined_data, 422));
        }
    }

 

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)