W3docs

strspn()

La funzione strspn() in PHP calcola la lunghezza del segmento iniziale di una stringa composto interamente da caratteri contenuti in una maschera specificata.

Introduzione

La funzione strspn() in PHP restituisce la lunghezza del segmento iniziale di una stringa composto interamente da caratteri trovati in una maschera specificata (un insieme di caratteri consentiti). Non appena incontra un carattere che non è nella maschera, smette di contare e restituisce il numero di caratteri corrispondenti fino a quel punto.

Un modo comune di pensarci: "A partire dall'inizio, quanti caratteri appartengono a questo insieme consentito prima di incontrarne uno che non ci appartiene?" Questo rende strspn() utile per la validazione e il parsing leggeri — ad esempio, verificare quante cifre iniziali ha una stringa, o se un valore è composto solo da caratteri consentiti.

Questa pagina tratta la sintassi della funzione, ogni parametro (inclusi i spesso fraintesi $start e $length), diversi esempi eseguibili, insidie comuni e come si relaziona alla sua controparte strcspn().

Sintassi

strspn(string $string, string $characters, int $offset = 0, ?int $length = null): int
ParametroDescrizione
$stringLa stringa soggetto da esaminare.
$charactersLa maschera — l'insieme di caratteri consentiti nel segmento iniziale. L'ordine dei caratteri non è rilevante.
$offsetOpzionale. La posizione in $string da cui iniziare il conteggio. Un valore negativo conta dalla fine della stringa. Il valore predefinito è 0.
$lengthOpzionale. Il numero massimo di caratteri da esaminare. Un valore negativo si ferma a quel numero di caratteri dalla fine. Il valore predefinito corrisponde al resto della stringa.

Valore restituito: un int — la lunghezza del segmento iniziale corrispondente. Se il primo carattere esaminato non è nella maschera, restituisce 0.

Nota: nel manuale ufficiale i parametri sono chiamati $string e $characters. Li si può trovare indicati anche come subject e mask — significano la stessa cosa.

Come funziona

La funzione scansiona $string da sinistra a destra (a partire da $offset) e mantiene un conteggio incrementale finché ogni carattere è presente in $characters. La scansione si interrompe al primo carattere che non è nella maschera, e tale conteggio viene restituito. Non guarda mai oltre la prima non corrispondenza, anche se i caratteri successivi avrebbero corrisposto.

strspn() è sensibile alle maiuscole e basata sui byte (opera su singoli byte, quindi non è compatibile con il multibyte/UTF‑8).

Esempio di base

php— editable, runs on the server

"Hello" (5 caratteri) è composto interamente da lettere presenti nella maschera "HeloWrd". Il carattere successivo è uno spazio, che non è nella maschera, quindi la scansione si interrompe e la funzione restituisce 5. Si noti che la maschera deve solo contenere le lettere consentite — la W, la r e la d sono presenti anche se la scansione non le raggiunge mai.

Contare i caratteri iniziali

Un caso d'uso frequente è misurare quanti caratteri iniziali di un certo tipo ha una stringa — ad esempio, le cifre iniziali:

<?php

$digits = "1234567890";

echo strspn("42 is the answer", $digits); // 2
echo "\n";
echo strspn("abc123", $digits);           // 0 — first char 'a' is not a digit

Poiché "42 is the answer" inizia con due cifre seguite da uno spazio, il risultato è 2. Nella seconda stringa il primo carattere è una lettera, quindi la funzione restituisce 0 immediatamente.

Utilizzo di $offset e $length

Il parametro opzionale $offset permette di iniziare il conteggio a partire da una posizione intermedia nella stringa, mentre $length limita il numero di caratteri esaminati.

<?php

// Start at index 1 ("oobar"): 'o','o' match, 'b' stops -> 2
echo strspn("foobar", "of", 1);    // 2
echo "\n";

// Only examine the first 1 character: 'f' matches -> 1
echo strspn("foobar", "f", 0, 1);  // 1

Un $offset negativo conta dalla fine della stringa, e un $length negativo si ferma a quel numero di caratteri prima della fine — utile quando si vuole ignorare una parte finale.

Insidia della sensibilità alle maiuscole

strspn() distingue maiuscole e minuscole. Se si ha bisogno di un controllo senza distinzione tra maiuscole e minuscole, normalizzare prima la stringa con strtolower():

<?php

echo strspn("Hello", "helo");                  // 0 — 'H' is not in the mask
echo "\n";
echo strspn(strtolower("Hello"), "helo");      // 4 — now 'hell' matches

strspn() vs strcspn()

Le due funzioni sono immagini speculari l'una dell'altra:

  • strspn() conta i caratteri iniziali che sono nella maschera.
  • strcspn() conta i caratteri iniziali che non sono nella maschera (si ferma al primo carattere che è nella maschera).

Quindi strcspn("Hello World", " ") restituisce 5 — il numero di caratteri prima del primo spazio. Usa strcspn() quando vuoi trovare quanti caratteri mancano al primo carattere "vietato" (come un delimitatore). Vedi strcspn() per i dettagli.

Funzioni correlate

  • strcspn() — il complemento; conta i caratteri iniziali non presenti nella maschera.
  • strpos() — trova la posizione della prima occorrenza di una sottostringa.
  • substr() — estrae una parte di una stringa, spesso combinata con strspn() per estrarre il segmento corrispondente.
  • strlen() — ottiene la lunghezza totale di una stringa.

Conclusione

strspn() risponde a una domanda precisa: quanto è lunga la sequenza di caratteri consentiti all'inizio di questa stringa? È veloce, priva di dipendenze e adatta a task di validazione e parsing semplice. Ricorda che è sensibile alle maiuscole e basata sui byte, che si ferma al primo carattere fuori dalla maschera e che la sua controparte strcspn() fa l'inverso. Con queste regole in mente puoi usarla per scrivere controlli sulle stringhe concisi ed efficienti.

Esercitazione

Pratica
Qual è la funzione principale di strspn() in PHP?
Qual è la funzione principale di strspn() in PHP?
Was this page helpful?