マスクにマッチしない最初のセグメントの長さを返す

# strcspn

(PHP 4, PHP 5, PHP 7, PHP 8)

strcspn — マスクにマッチしない最初のセグメントの長さを返す

### 説明

function strcspn(
string `$string`,
string `$characters`,
int `$offset` = 0,
?int `$length` = `null`
): int

`string` において `characters` の文字がどれも含まれていない最初のセグメントの長さを返します。

`offset` と `length` を省略した場合は、`string` の全体を調べます。 これらのパラメータを指定した場合は、 `strcspn(substr($string, $offset, $length), $characters)` をコールするのと同じ動きになります。 (詳細は substr を参照ください)。

### パラメータ

`string`

  調べたい文字列。

`characters`

  許可しない文字をすべて含む文字列。

`offset`

  `string` の中で調べ始める位置。

  `offset` に非負の値を指定した場合は、 strcspn() は、 `string` の `offset` 番目の文字から調べ始めます。 たとえば '`abcdef`' という文字列があったとすると、 `0` 番目の文字が '`a`' で `2` 番目の文字は '`c`' のようになります。

  `offset` に負の値を指定した場合は、 strcspn() は、 `string` の後ろから `offset` 番目の文字から調べ始めます。

`length`

  `string` の中での調べるセグメントの長さ。

  `length` に非負の値を指定した場合は、 `string` の開始位置から `length` 文字ぶんだけ調べます。

  `length` に負の値を指定した場合は、 `string` の開始位置から調べ始めて、 `string` の末尾から `length` 文字目のところまで調べます。

### 戻り値

`string` の中で、 `characters` の文字をまったく含まない 最初のセグメントの長さを返します。

> 注意:

> `offset` を指定した場合は、その位置から長さを数え始めます。 `string` の先頭から数えるわけではありません。

### 変更履歴

バージョン | 説明
--- | ---
8.4.0 | PHP 8.4.0 より前のバージョンでは、 `characters` が空の文字列の場合、 `string` 内の最初の null バイトで探索が誤って停止してしまうことがありました。
8.0.0 | `length` は、nullable になりました。

### 例

例1 strcspn() の例

    <?php
    $a = strcspn('banana', 'a');
    $b = strcspn('banana', 'abcd');
    $c = strcspn('banana', 'z');
    $d = strcspn('abcdhelloabcd', 'a', -9);
    $e = strcspn('abcdhelloabcd', 'a', -9, -5);

    var_dump($a);
    var_dump($b);
    var_dump($c);
    var_dump($d);
    var_dump($e);
    ?>

上の例の出力は以下となります。

    int(1)
    int(0)
    int(6)
    int(5)
    int(4)

### 注意

> 注意: この関数はバイナリデータに対応しています。

### 参考

- strspn() - 指定したマスク内に含まれる文字からなる文字列の最初のセグメントの長さを探す

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open