¿Cómo verificar si la URL contiene una cadena dada?


361

¿Cómo podría hacer algo como esto?

<script type="text/javascript">
$(document).ready(function () {
    if(window.location.contains("franky")) // This doesn't work, any suggestions?
    {
         alert("your url contains the name franky");
    }
});
</script>

"window.location.contains is not a function"
gen b.

Respuestas:


657

Necesita agregar la propiedad href y marcar en indexOflugar decontains

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
    if (window.location.href.indexOf("franky") > -1) {
      alert("your url contains the name franky");
    }
  });
</script>


3
Tengo una URL larga como esta, preview.tbwabox.co.nz/_v005/index.html#buying-a-car y quiero verificar si la cadena tiene "comprar un auto pero el script" no funciona ?
Vennsoh

66
@Vennsoh Usted no es capaz de encontrar la "compra de coches", ya que hay que buscar en el window.location.hashno window.location.href. Simplemente cambie esos valores en la función de OP.
Adrian Gonzales

1
@JW ¿Por qué> -1` no podemos usar`> 0`?
Elshan

55
@Elshan Porque, estrictamente hablando, .href.indexOf("franky") puede devolver un valor de 0 si .hrefcomienza con "franky". Por supuesto, en este caso, nunca .hrefcomienza como siempre comienza con el protocolo, típicamente "http:" o "file:". A pesar de esto, SIEMPRE debe usar> -1,> = 0 o, mi preferencia,! == - 1 al comparar con el resultado de indexOf().
robinCTS

Tengo una matriz de valor y quiero ver si la URL tiene alguno de los valores y darme el índice de la matriz que coincida con la condición. ¿Cómo puedo hacer eso? Gracias.
Si8

101
if (window.location.href.indexOf("franky") != -1)

Lo haría. Alternativamente, podría usar una expresión regular:

if (/franky/.test(window.location.href))

44
Un pros / contras entre las dos opciones sería una buena adición a esta respuesta.
Chris

Pero si usara una expresión regular, nadie podría leerla;)
RayLoveless

26

Usarías indexOfasí:

if(window.location.href.indexOf("franky") != -1){....}

También observe la adición de hrefpara la cadena de lo contrario haría:

if(window.location.toString().indexOf("franky") != -1){....}

23

al igual que:

    <script type="text/javascript">
        $(document).ready(function () {
            if(window.location.href.indexOf("cart") > -1) 
            {
                 alert("your url contains the name franky");
            }
        });
    </script>

¿Cuál es la diferencia entre llamar a window.location.indexOf y window.location.href.indexOf?
starsplusplus

@starsplusplus No hay ninguna diferencia. window.location.hrefes un alias de window.location developer.mozilla.org/en-US/docs/Web/API/Window.location
Adrian Gonzales

El anterior funciona bien para mí, pero para dos variables, cómo verificar que contiene los dos valores
Vinoth Narayan

1
@VinothNarayan Simplemente puede agregar otra condición a la ifdeclaración. Para asegurarse de que tiene ambos, puede usar el operador AND, que está &&en Javascript: if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) Para verificar si tiene uno u otro valor, use el operador OR, que son dos caracteres de canalización|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales,

19

window.locationno es una cadena, pero tiene un toString()método. Entonces puedes hacerlo así:

(''+window.location).includes("franky")

o

window.location.toString().includes("franky")

De los antiguos documentos de Mozilla :

Los objetos de ubicación tienen un método toString que devuelve la URL actual. También puede asignar una cadena a window.location. Esto significa que puede trabajar con window.location como si fuera una cadena en la mayoría de los casos. A veces, por ejemplo, cuando necesita llamar a un método String, debe llamar explícitamente a toString.


2
En Firefox 48, String.prototype.contains () se ha eliminado. Use String.prototype.includes () solamente. Ver aquí
CaseyC

@CaseyC cambiado. ¡Gracias!
Alin Purcaru

9

La forma regex:

var matches = !!location.href.match(/franky/); //a boolean value now

O en una declaración simple que podría usar:

if (location.href.match(/franky/)) {

Lo uso para probar si el sitio web se ejecuta localmente o en un servidor:

location.href.match(/(192.168|localhost).*:1337/)

Esto verifica si href contiene 192.168o localhostAND y es seguido por :1337.

Como puede ver, usar regex tiene sus ventajas sobre las otras soluciones cuando la condición se vuelve un poco más complicada.


Agradable. Solía ​​if (window.parent.location.href.match (/ \? /)) {Window.parent.location = window.parent.location.pathname; } y funciona muy bien ...
Tarik

Alternativamente, me parece un poco más conciso usarlo if(/franky/.test(location.href)) { /* regex matched */ }si no estoy haciendo nada con los partidos.
cchamberlain

Sí, testdefinitivamente es más limpio que matchen este caso.
Stephan Bijzitter

6

document.URLdebería conseguirte el URLy

if(document.URL.indexOf("searchtext") != -1) {
    //found
} else {
    //nope
} 

6

Prueba esto, es más corto y funciona exactamente como window.location.href:

if (document.URL.indexOf("franky") > -1) { ... }

también si quieres consultar la URL anterior:

if (document.referrer.indexOf("franky") > -1) { ... }

@sixstarpro No hice el voto negativo, pero, oh, no lo sé, ¡tal vez obviamente porque usted dio la misma respuesta que esta publicada hace 18 meses! Además, la información adicional sobre document.referreres completamente irrelevante para la pregunta.
robinCTS

4

Más fácil se pone

<script type="text/javascript">
$(document).ready(function () {
    var url = window.location.href;
    if(url.includes('franky'))    //includes() method determines whether a string contains specified string.
    {
         alert("url contains franky");
    }
});
</script>

3

Prueba esto:

<script type="text/javascript">             
    $(document).ready
    (
        function () 
        { 
            var regExp = /franky/g;
            var testString = "something.com/frankyssssddsdfjsdflk?franky";//Inyour case it would be window.location;
            if(regExp.test(testString)) // This doesn't work, any suggestions.                 
            {                      
                alert("your url contains the name franky");                 
            }             
        }
    );         
</script> 

3

Prueba indexOf

if (foo.indexOf("franky") >= 0)
{
  ...
}

También puede intentar buscar (para expresiones regulares)

if (foo.search("franky") >= 0)
{
  ...
}

2

Use Window.location.href para tomar la url en javascript. es una propiedad que le indicará la ubicación actual de la URL del navegador. Establecer la propiedad en algo diferente redirigirá la página.

if (window.location.href.indexOf('franky') > -1) {
     alert("your url contains the name franky");
}

Cómo verificar si una url es la página predeterminada y la comprobación de cadena iam no está visible. como por ejemplo sample.com/homepage.aspx es mi página e iam buscando la cadena 'página de inicio'. if ((loc.toString (). toUpperCase (). indexOf ('homepage')> -1)) {} funciona bien pero cuando Iam en sample.com (que todavía apunta a homepage.aspx) el código anterior no funcionará. ¿Cómo verificar este escenario también? ¡Por favor ayuda!
Sweta

2

Me gusta crear un booleany luego usarlo de forma lógica if.

//kick unvalidated users to the login page
var onLoginPage = (window.location.href.indexOf("login") > -1);

if (!onLoginPage) {
  console.log('redirected to login page');
  window.location = "/login";
} else {
  console.log('already on the login page');
}

1

Poner en su archivo js

                var url = window.location.href;
                console.log(url);
                console.log(~url.indexOf("#product-consulation"));
                if (~url.indexOf("#product-consulation")) {
                    console.log('YES');
                    // $('html, body').animate({
                    //     scrollTop: $('#header').offset().top - 80
                    // }, 1000);
                } else {
                    console.log('NOPE');
                }

No lo sabía ~, así que lo busqué: " ~es un truco para convertir indexOf()el valor de retorno encontrado en verdadero (al tiempo que hace que no se encuentre como falso). De lo contrario, la gente lo usa por su efecto secundario de truncar números ..." - stackoverflow.com/a/12299678/3917091
Regular Joe

1

Las expresiones regulares serán más óptimas para muchas personas debido a los límites de palabras \bo dispositivos similares. Límites de las palabras se producen cuando cualquiera de 0-9, a-z, A-Z, _están en ese lado del partido, o cuando un carácter alfanumérico se conecta a la línea o al final o al principio de cadena.

if (location.href.match(/(?:\b|_)franky(?:\b|_)))

Si lo usa if(window.location.href.indexOf("sam"), obtendrá coincidencias para , flotsamy sameentre otras palabras. tomcoincidiría con tomate y mañana, sin expresiones regulares.

Hacerlo sensible a mayúsculas y minúsculas es tan simple como eliminar el i.

Además, agregar otros filtros es tan fácil como

if (location.href.match(/(?:\b|_)(?:franky|bob|billy|john|steve)(?:\b|_)/i))

Hablemos de eso (?:\b|_). RegEx generalmente se define _como un, word characterpor lo que no causa un límite de palabra. Usamos esto (?:\b|_)para lidiar con esto. Para ver si encuentra \bo _a ambos lados de la cadena.

Otros idiomas pueden necesitar usar algo como

if (location.href.match(/([^\wxxx]|^)(?:franky|bob|billy|john|steve)([^\wxxx]|$)/i))
//where xxx is a character representation (range or literal) of your language's alphanumeric characters.

Todo esto es más fácil que decir

var x = location.href // just used to shorten the code
x.indexOf("-sam-") || x.indexOf("-sam.") || x.indexOf(" sam,") || x.indexOf("/sam")...
// and other comparisons to see if the url ends with it 
// more for other filters like frank and billy

Los sabores de otros idiomas de las expresiones regulares son compatibles, \p{L}pero javascript no, lo que facilitaría la tarea de detectar caracteres extranjeros. Algo como[^\p{L}](filters|in|any|alphabet)[^\p{L}]


El único inconveniente de las expresiones regulares es que son "solo de escritura" (es decir, imposibles de leer);)
RayLoveless

@RayLoveless Sí, en idiomas sin (?#comments)y espacio libre # commentscomo javascript. Sin embargo, este no es difícil de leer. // Cuando uso una expresión regular compleja en javascript, guardo una copia comentada que puedo editar lol.
Regular Joe

0

Supongamos que tienes este script

<div>
  <p id="response"><p>
  <script>
    var query = document.location.href.substring(document.location.href.indexOf("?") + 1);
    var text_input = query.split("&")[0].split("=")[1];
    document.getElementById('response').innerHTML=text_input;
  </script> </div>

Y la forma de URL es www.localhost.com/web_form_response.html?text_input=stack&over=flow

El texto escrito <p id="response">serástack


0

Será una buena práctica si convierte su cadena a minúsculas o mayúsculas ya que el método indexof () distingue entre mayúsculas y minúsculas. Esto será si su búsqueda no distingue entre mayúsculas y minúsculas. Por lo tanto, para una búsqueda que no distinga entre mayúsculas y minúsculas, será:

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.