LoginSignup
1
0

More than 5 years have passed since last update.

PHP で文字列からトークン(連続半角英数字)を抜き出し、書式を判断する

Last updated at Posted at 2018-10-18

ID の書式が正しいか(連続した半角英数字であるか)の検証と、ID の抜き出しのため「php 連続 半角英数字 抜き出す」を Qiita に絞り込んでググっても出てこなかったので、自分の備忘録用として。

TL;DR (トークンであるかを検証する関数)

PHP で 7325e63298f853dbd777 といった、アクセストークン/記事 ID/ユーザー ID などの連続半角英数であるか調べるユーザー関数です。

/**
 * 文字列が指定された長さの半角英数字トークンか返す.
 *
 * @param  string  $id_verify 調べたい値
 * @param  integer $len       トークンの長さ
 * @return boolean
 */
function isIdUniformed($id_verify, $len)
{
    if (! ctype_alnum($id_verify)) {
        return false;
    }

    return $len === strlen($id_verify);
}

TS;DR (連続半角英数字の抜き出しと検証)

URL から連続した半角英数字の記事 ID を取得し、ID が正しい書式(連続した半角英数字)か確認するサンプル。

サンプル・スクリプト
<?php

// サンプルの記事 ID から ID の長さを取得
$id_sample = 'f4b6807a116a5e94998f';
$id_length = strlen($id_sample);

// 記事 ID の検索パターン
$pattern   = '/items\/([0-9a-z]+)/';

// 記事 ID を抜き出す URL
$url = 'https://qiita.com/KEINOS/items/7325e63298f853dbd777';

// 記事 ID の抜き出し
if (! preg_match($pattern, $url, $matches)) {
    die('No pattern found.');
}
$id_verify = $matches[1];

// 抜き出した記事 ID の表示
echo 'ID to verify: ', $id_verify, PHP_EOL;

// 検証結果の表示
echo isIdUniformed($id_verify, $id_length) ? 'OK:Uniformed' : 'NG:Irregular format';

// 検証のユーザー関数定義
function isIdUniformed($id_verify, $len)
{
    if (! ctype_alnum($id_verify)) {
        return false;
    }

    return $len === strlen($id_verify);
}

結果
ID to verify: 7325e63298f853dbd777
OK:Uniformed
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0