Cómo verificar si una cadena contiene otra subcadena en PHP
Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)
En muchas ocasiones, cuando trabajo con cadenas en PHP se vuelve importante verificar si una cadena contiene otra subcadena. PHP tiene muchas funciones para ayudarte a manipular cadenas de la forma que desees. Hoy usaremos algunas de estas funciones para aprender cómo verificar si una cadena contiene una subcadena específica.


PHPCómo verificar si una cadena contiene otra subcadena en PHPMonty Shokeen

PHPCómo recortar cadenas en PHPMonty Shokeen
Uso de funciones nuevas en PHP 8
En PHP 8 se han agregado tres funciones nuevas para ayudarnos a averiguar si una cadena contiene otra subcadena. Por favor ten en cuenta que todas estas funciones distinguen entre mayúsculas y minúsculas, y la verificación de la existencia de una subcadena vacía mediante el uso de estas funciones siempre devolverá true.
-
str_contains(), que verifica si una cadena contiene una subcadena específica. -
str_end_width(), que verifica si una cadena termina con una subcadena específica. -
str_starts_with(), que verifica si una cadena comienza con una subcadena específica.
1 |
<?php
|
2 |
|
3 |
$sentence = "Dolphins and Elephants are intelligent animals."; |
4 |
|
5 |
if(str_contains($sentence, "Elephants")) { |
6 |
echo 'Elephants are intelligent.'; |
7 |
}
|
8 |
// Elephants are intelligent.
|
9 |
|
10 |
if(str_starts_with($sentence, "Dolphins")) { |
11 |
echo 'Dolphins are intelligent.'; |
12 |
}
|
13 |
// Dolphins are intelligent.
|
14 |
|
15 |
if(str_ends_with($sentence, ".")) { |
16 |
echo 'There is a full stop at the end of the sentence.'; |
17 |
}
|
18 |
// There is a full stop at the end of the sentence.
|
19 |
|
20 |
?>
|
Como mencioné anteriormente, estas funciones llevan a cabo una búsqueda de coincidencias distinguiendo entre mayúsculas y minúsculas. También puedes llevar a cabo una búsqueda de coincidencias sin distinguir entre mayúsculas y minúsculas con ellas, primero convirtiendo tanto la cadena como la subcadena a mayúsculas o a minúsculas usando strtolower() o strtoupper().
Estas funciones son ideales si no quieres obtener información adicional sobre las subcadenas, como su posición. Las personas que necesitan información adicional sobre el valor coincidente deben considerar el uso de las siguientes funciones.
Uso de strpos() y stripos()
Puedes usar la función strpos() de PHP para obtener la posición de la primera ocurrencia de una subcadena dentro de una cadena. La función devolverá false si no puede encontrar la subcadena.
Al usar strpos() para buscar una subcadena, asegúrate de usar el operador de desigualdad estricta. Esto se debe a que la posición devuelta por strpos() comienza en 0, y 0 también puede ser equivalente a false. El uso de una verificación regular de igualdad te devolverá falsos negativos si la subcadena se encuentra justo al comienzo de la cadena principal.
Estos son algunos ejemplos de strpos():
1 |
<?php
|
2 |
|
3 |
$sentence = "Amy, Angela, Adam and Andrew are going to a party."; |
4 |
|
5 |
if(strpos($sentence, "Angela") != false) { |
6 |
echo 'Angela is going to a party!'; |
7 |
}
|
8 |
// Angela is going to a party!
|
9 |
|
10 |
|
11 |
if(strpos($sentence, "Amy") != false) { |
12 |
echo 'Amy is going to a party! (1)'; |
13 |
} else { |
14 |
echo 'Amy is not going to a party! (1)'; |
15 |
}
|
16 |
// Amy is not going to a party! (1)
|
17 |
|
18 |
if(strpos($sentence, "Amy") !== false) { |
19 |
echo 'Amy is going to a party! (2)'; |
20 |
} else { |
21 |
echo 'Amy is not going to a party! (2)'; |
22 |
}
|
23 |
// Amy is going to a party! (2)
|
24 |
|
25 |
?>
|
Como puedes ver en el ejemplo anterior, Angela no está al principio de nuestra oración, por lo que tendría una posición distinta de cero que se evalúa como true.
Por otro lado, Amy está justo al principio y su posición 0 se evalúa como false, a pesar de que existe en la cadena. Por lo tanto, asegúrate de evaluar siempre el valor de strpos() con !==, ya que no hay manera de saber en dónde puede aparecer una subcadena al trabajar con cadenas en la vida real.
En ocasiones, es posible que necesites llevar a cabo esta verificación de subcadenas en una cadena sin distinguir entre mayúsculas y minúsculas. En ese caso, simplemente puedes usar la función stripos() en PHP. Funciona exactamente como strpos(), pero hace que la búsqueda no distinga entre mayúsculas y minúsculas.
1 |
<?php
|
2 |
|
3 |
$sentence = "Detect if this sentence mentions MaNGoEs."; |
4 |
|
5 |
if(strpos($sentence, "mangoes") !== false) { |
6 |
echo 'There was no case-sensitive mango match!'; |
7 |
}
|
8 |
|
9 |
if(stripos($sentence, "mangoes") !== false) { |
10 |
echo 'There is a case-insensitive mango match!'; |
11 |
}
|
12 |
// There is a case-insensitive mango match!
|
13 |
|
14 |
?>
|
Uso de strstr() y stristr()
De forma predeterminada, la función strstr() devuelve una parte de la cadena principal, comenzando desde la subcadena y hasta el final de la cadena principal. Devolverá false si la subcadena no existe dentro de la cadena principal.
Podemos usar esta información para verificar la existencia de una subcadena dentro de una cadena. Todo lo que tenemos que hacer es evaluar el valor devuelto por strstr() y verificar si es false o no. Al igual que en el caso anterior, vamos a usar el operador de desigualdad estricta !== para llevar a cabo la verificación.
Estos son algunos ejemplos:
1 |
<?php
|
2 |
|
3 |
$sentence_a = "Is 984523850 your number?"; |
4 |
$sentence_b = "No, my number is 984523850"; |
5 |
|
6 |
if(strstr($sentence_a, "0") != false) { |
7 |
echo 'The first sentence has a 0 in it.'; |
8 |
}
|
9 |
// The first sentence has a 0 in it.
|
10 |
|
11 |
if(strstr($sentence_b, "0") != false) { |
12 |
echo 'The second sentence has a 0 in it. (1)'; |
13 |
} else { |
14 |
echo 'There is no zero in the second sentence. (1)'; |
15 |
}
|
16 |
// There is no zero in the second sentence. (1)
|
17 |
|
18 |
if(strstr($sentence_b, "0") !== false) { |
19 |
echo 'The second sentence has a 0 in it. (2)'; |
20 |
} else { |
21 |
echo 'There is no zero in the second sentence. (2)'; |
22 |
}
|
23 |
// The second sentence has a 0 in it. (2)
|
24 |
|
25 |
?>
|
Puedes usar stristr() en lugar de strstr() para que la búsqueda no distinga entre mayúsculas y minúsculas. El resto del comportamiento de stristr() se mantiene exactamente igual.
Pensamientos finales
En este consejo rápido, revisamos tres maneras diferentes de verificar si una cadena contiene una subcadena en PHP. Puedes usar cualquiera de estas funciones dependiendo de la información que necesites de la cadena. El uso de las nuevas funciones de PHP 8 te permitirá omitir cualquier tipo de verificación estricta, pero necesitarás usar las funciones más antiguas si quieres saber cuál es la posición de la subcadena o si quieres obtener una parte de la cadena principal como valor de retorno.



