php - texto - ¿Cómo verificar si una cadena comienza con una cadena específica?
php si contiene cadena (6)
Además trabajo:
if (eregi("^http:", $url)) {
echo "OK";
}
Esta pregunta ya tiene una respuesta aquí:
- Las funciones startsWith () y endsWith () en PHP 30 respuestas
Estoy tratando de comprobar si una cadena comienza con http
. ¿Cómo puedo hacer esta comprobación?
$string1 = ''google.com'';
$string2 = ''http://www.google.com'';
Puede usar una expresión regular simple (versión actualizada del usuario viriathus ya que eregi
está en desuso)
if (preg_match(''#^http#'', $url) === 1) {
// Starts with http (case sensitive).
}
o si quieres una búsqueda insensible al caso
if (preg_match(''#^http#i'', $url) === 1) {
// Starts with http (case insensitive).
}
Regexes permiten realizar tareas más complejas.
if (preg_match(''#^https?://#i'', $url) === 1) {
// Starts with http:// or https:// (case insensitive).
}
En cuanto al rendimiento, no es necesario crear una nueva cadena (a diferencia de con substr) ni analizar toda la cadena si no comienza con lo que quieres. Tendrá una penalización de rendimiento la primera vez que use la expresión regular (debe crearla / compilarla).
Esta extensión mantiene un caché global por subproceso de expresiones regulares compiladas (hasta 4096). http://www.php.net/manual/en/intro.pcre.php
Puede verificar si su cadena comienza con http o https usando la pequeña función a continuación.
function has_prefix($string, $prefix) {
return ((substr($string, 0, strlen($prefix)) == $prefix) ? true : false);
}
$url = ''http://www.google.com'';
echo ''the url '' . (has_prefix($url, ''http://'') ? ''does'' : ''does not'') . '' start with http://'';
echo ''the url '' . (has_prefix($url, ''https://'') ? ''does'' : ''does not'') . '' start with https://'';
También existe la función strncmp()
y la función strncasecmp()
que es perfecta para esta situación:
if (strncmp($string_n, "http", 4) === 0)
En general:
if (strncmp($string_n, $prefix, strlen($prefix)) === 0)
La ventaja sobre el enfoque substr()
es que strncmp()
solo hace lo que se necesita hacer, sin crear una cadena temporal.
Utilice strpos()
:
if (strpos($string2, ''http'') === 0) {
// It starts with ''http''
}
Recuerda los tres signos de igual ( ===
). No funcionará correctamente si solo usas dos. Esto se debe a que strpos()
devolverá false
si no se puede encontrar la aguja en el pajar.
substr( $string_n, 0, 4 ) === "http"
Si estás tratando de asegurarte que no sea otro protocolo. Usaría http://
lugar, ya que https también coincidiría, y otras cosas como http-protocol.com.
substr( $string_n, 0, 7 ) === "http://"
Y en general:
substr($string, 0, strlen($query)) === $query