¿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>
RayLoveless
fuente
"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>

JW
fuente
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))
NickFitz
fuente
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){....}
Sarfraz
fuente
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>
Adrian Gonzales
fuente
¿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.

Alin Purcaru
fuente
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.

Stephan Bijzitter
fuente
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
} 
Suman
fuente
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
fuente
@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>
Vishnu Dev
fuente
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> 
Chandu
fuente
3

Prueba indexOf

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

También puede intentar buscar (para expresiones regulares)

if (foo.search("franky") >= 0)
{
  ...
}
Yoni Baciu
fuente
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");
}
Sudharsan S
fuente
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');
}
Ronnie Royston
fuente
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');
                }
alemac852
fuente
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}]

Joe regular
fuente
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

Dhiraj Himani
fuente
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");
 }
GeniusGeek
fuente