W3docs

stripos()

La función stripos() en PHP busca la posición de la primera ocurrencia de una subcadena en una cadena sin distinguir mayúsculas de minúsculas.

Introducción

stripos() encuentra la posición de la primera ocurrencia de una subcadena dentro de una cadena, ignorando las mayúsculas y minúsculas. Devuelve el índice basado en cero donde comienza la coincidencia, o false si la subcadena no está presente.

La i del nombre significa case-insensitive (sin distinción de mayúsculas): "PHP", "php" y "Php" coinciden de la misma manera. Si necesitas una búsqueda con distinción de mayúsculas, usa strpos(). Esta página cubre la sintaxis, el problema crítico de !== false, el parámetro opcional $offset y cómo stripos() se relaciona con las demás funciones de posición.

Sintaxis

stripos(string $haystack, string $needle, int $offset = 0): int|false
ParámetroDescripción
$haystackLa cadena en la que buscar.
$needleLa subcadena que se busca.
$offsetOpcional. El índice en $haystack donde comienza la búsqueda. El valor predeterminado es 0 (el inicio). Un offset negativo cuenta desde el final de la cadena.

Valor de retorno: la posición basada en cero de la primera coincidencia (un int), o false si $needle no se encuentra.

Un ejemplo básico

php— editable, runs on the server

El needle "fox" está en minúsculas, pero el haystack contiene "FOX". Como stripos() ignora las mayúsculas, sigue encontrando la coincidencia e imprime:

Found 'fox' at position 16

Si usas strpos() aquí, el resultado sería false, ya que las mayúsculas difieren.

El problema de !== false

Este es el error más común con stripos() (y con todas las funciones *pos()). Cuando se encuentra una coincidencia al inicio mismo de la cadena, el valor de retorno es 0 — y 0 es falsy en PHP. Una comprobación laxa como if (stripos(...)) trataría una coincidencia real como "no encontrado":

<?php

$pos = stripos("Hello world", "hello");

// Wrong: 0 is falsy, so this branch runs even though there IS a match
if ($pos) {
  echo "loose check: found\n";
} else {
  echo "loose check: NOT found (wrong!)\n";
}

// Correct: compare against false with the strict !== operator
if ($pos !== false) {
  echo "strict check: found at position $pos\n";
} else {
  echo "strict check: not found\n";
}

Salida:

loose check: NOT found (wrong!)
strict check: found at position 0

Compara siempre el resultado con !== false cuando solo quieras saber si existe la subcadena.

Uso del parámetro $offset

El tercer argumento permite comenzar la búsqueda a mitad de la cadena — útil para encontrar la segunda (o posterior) ocurrencia:

<?php

$text = "PHP is great. PHP is everywhere.";

$first  = stripos($text, "php");        // start at 0
$second = stripos($text, "php", $first + 1); // skip past the first match

echo "First occurrence:  $first\n";
echo "Second occurrence: $second\n";

Salida:

First occurrence:  0
Second occurrence: 14

Un uso práctico: filtro de palabras clave sin distinción de mayúsculas

Como ignora las mayúsculas, stripos() es ideal para comprobaciones del tipo "¿este texto menciona X?", como marcar mensajes que contienen una palabra prohibida sin importar cómo esté escrita:

<?php

$message = "Get this AMAZING deal now!";
$banned  = ["amazing", "free", "winner"];

foreach ($banned as $word) {
  if (stripos($message, $word) !== false) {
    echo "Blocked: contains '$word'\n";
    break;
  }
}

Salida:

Blocked: contains 'amazing'

Funciones relacionadas

FunciónMayúsculasBusca desde
stripos()InsensibleInicio → primera coincidencia
strpos()SensibleInicio → primera coincidencia
strripos()InsensibleFinal → última coincidencia
stristr()InsensibleDevuelve la subcadena coincidente, no su posición

Consulta también substr() para extraer texto una vez que tienes una posición, y str_replace() para reemplazos con distinción de mayúsculas.

Conclusión

stripos() devuelve la posición basada en cero de la primera coincidencia sin distinción de mayúsculas de una subcadena, o false si no hay ninguna. Recuerda comprobar el resultado con !== false para que una coincidencia en la posición 0 no se confunda con "no encontrado", usa $offset para encontrar ocurrencias posteriores, y recurre a strpos() cuando las mayúsculas importan.

Práctica

Práctica
¿Qué hace la función stripos() en PHP?
¿Qué hace la función stripos() en PHP?
Was this page helpful?