Comment vérifier si l'URL contient une chaîne donnée?


361

Comment pourrais-je faire quelque chose comme ça:

<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"
gène b.

Réponses:


657

Vous devez ajouter la propriété href et vérifier indexOfau lieu 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
J'ai une longue URL comme celle-ci, preview.tbwabox.co.nz/_v005/index.html#buying-a-car et je veux vérifier si la chaîne a "acheter une voiture mais le script" ne fonctionne pas ?
Vennsoh

6
@Vennsoh Vous n'êtes pas en mesure de trouver « l' achat de voitures » parce que vous devez regarder dans window.location.hashpas window.location.href. Échangez simplement ces valeurs dans la fonction OP.
Adrian Gonzales

1
@JW Pourquoi`> -1` ne pouvons-nous pas utiliser`> 0`?
Elshan

5
@Elshan Car, à proprement parler, .href.indexOf("franky") peut renvoyer une valeur de 0 s'il .hrefcommence par "franky". Bien sûr, dans ce cas, il ne fait jamais comme .hreftoujours commence par le protocole, généralement "http:" ou "file:". Malgré cela, vous devez TOUJOURS utiliser> -1,> = 0 ou, ma préférence,! == - 1 lors de la comparaison avec le résultat de indexOf().
robinCTS

J'ai un tableau de valeurs et je veux voir si l'URL a une valeur et me donner l'index du tableau qui correspond à la condition. Comment je fais ça? Merci.
Si8

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

le ferait. Alternativement, vous pouvez utiliser une expression rationnelle:

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

4
Un pour / contre entre les deux options serait un bel ajout à cette réponse.
Chris

Mais si j'utilisais une expression régulière, personne ne pourrait la lire;)
RayLoveless

26

Vous utiliseriez indexOfcomme ceci:

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

Notez également l'ajout de hrefpour la chaîne sinon vous feriez:

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

23

ainsi:

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

Quelle est la différence entre appeler window.location.indexOf et window.location.href.indexOf?
starsplusplus

@starsplusplus Il n'y a aucune différence. window.location.hrefest un alias de window.location developer.mozilla.org/en-US/docs/Web/API/Window.location
Adrian Gonzales

Celui ci-dessus fonctionne bien pour moi, mais pour deux variables, comment vérifier son contient les deux valeurs
Vinoth Narayan

1
@VinothNarayan Vous pouvez simplement ajouter une autre condition à l' ifinstruction. Pour vous assurer qu'il a les deux, vous pouvez utiliser l'opérateur AND, qui est &&en Javascript: if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) Pour vérifier s'il a l'une ou l'autre valeur, utilisez l'opérateur OR, qui est deux caractères de canal|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales

19

window.locationn'est pas une chaîne, mais il a une toString()méthode. Vous pouvez donc le faire comme ceci:

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

ou

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

D'après les anciens documents de Mozilla :

Les objets d'emplacement ont une méthode toString renvoyant l'URL actuelle. Vous pouvez également affecter une chaîne à window.location. Cela signifie que vous pouvez travailler avec window.location comme s'il s'agissait d'une chaîne dans la plupart des cas. Parfois, par exemple lorsque vous devez y appeler une méthode String, vous devez appeler explicitement toString.


2
Dans Firefox 48, String.prototype.contains () a été supprimé. Utilisez uniquement String.prototype.includes (). Voir ici
CaseyC

@CaseyC a changé. Merci!
Alin Purcaru

9

La manière regex:

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

Ou dans une simple déclaration, vous pouvez utiliser:

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

J'utilise ceci pour tester si le site Web fonctionne localement ou sur un serveur:

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

Ceci vérifie si le href contient soit 192.168ou localhostAND soit suivi de :1337.

Comme vous pouvez le voir, l'utilisation de regex a ses avantages sur les autres solutions lorsque la condition devient un peu plus délicate.


Agréable. J'ai utilisé if (window.parent.location.href.match (/ \? /)) {Window.parent.location = window.parent.location.pathname; } et ça marche très bien ...
Tarik

Alternativement, cela me semble un peu plus concis à utiliser if(/franky/.test(location.href)) { /* regex matched */ }si je ne fais rien avec les matchs.
cchamberlain

Ouais, testc'est définitivement plus propre que matchdans ce cas.
Stephan Bijzitter

6

document.URLdevrait vous obtenir le URLet

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

6

Essayez ceci, il est plus court et fonctionne exactement comme window.location.href:

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

aussi si vous voulez vérifier l'URL précédente:

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

@sixstarpro Je n'ai pas fait le downvote, mais, oh je ne sais pas, peut-être évidemment parce que vous avez donné la même réponse que celle publiée 18 mois plus tôt! De plus, les informations supplémentaires sur ne document.referrersont absolument pas pertinentes pour la question.
robinCTS

4

Plus c'est facile

<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

Essaye ça:

<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

Essayez indexOf

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

Vous pouvez également essayer la recherche (pour les expressions régulières)

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

2

Utilisez Window.location.href pour prendre l'url en javascript. c'est une propriété qui vous indiquera l'emplacement actuel de l'URL du navigateur. Définir la propriété sur quelque chose de différent redirigera la page.

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

Comment vérifier si une URL est la page par défaut et si la vérification de la chaîne iam n'est pas visible. comme par exemple sample.com/homepage.aspx est ma page et je cherche la chaîne 'homepage'. if ((loc.toString (). toUpperCase (). indexOf ('homepage')> -1)) {} fonctionne très bien mais lorsque Iam sur sample.com (qui pointe toujours vers homepage.aspx) le code ci-dessus ne fonctionnera pas. Comment vérifier également ce scénario? S'il vous plaît, aidez-moi!
Sweta

2

J'aime créer un boolean, puis l'utiliser dans une logique 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

Mettez votre fichier 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');
                }

Je ne savais pas ~, alors je l'ai recherché: " ~est une astuce pour transformer indexOf()la valeur de retour trouvée en véridique (tout en la rendant non trouvée comme fausse). Les gens l'utilisent autrement pour son effet secondaire de tronquer les nombres ..." - stackoverflow.com/a/12299678/3917091
Regular Joe

1

Les expressions régulières seront plus optimales pour beaucoup de gens en raison des limites de mots \bou d'appareils similaires. Limites de mots se produisent lorsque l' une 0-9, a-z, A-Z, _sont sur ce côté du prochain match, ou quand un Connects de caractères alphanumériques à la ligne ou à la fin de chaîne ou de commencer.

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

Si vous utilisez if(window.location.href.indexOf("sam"), vous obtiendrez des correspondances pour flotsamet same, entre autres. tomcorrespondrait à la tomate et demain, sans regex.

Le rendre sensible à la casse est aussi simple que de supprimer le i.

De plus, l'ajout d'autres filtres est aussi simple que

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

Parlons-en (?:\b|_). RegEx définit généralement _comme un word characterafin qu'il ne provoque pas de limite de mot. Nous l'utilisons (?:\b|_)pour y faire face. Pour voir s'il trouve \bou _de chaque côté de la chaîne.

D'autres langues peuvent avoir besoin d'utiliser quelque chose comme

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.

Tout cela est plus facile que de dire

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

Les versions d'autres langues prennent en charge les expressions régulières, \p{L}mais pas le javascript, ce qui faciliterait la tâche de détection des caractères étrangers. Quelque chose comme[^\p{L}](filters|in|any|alphabet)[^\p{L}]


Le seul
inconvénient

@RayLoveless Ouais, dans des langues sans (?#comments)et à espacement libre # commentscomme javascript. Cependant, celui-ci n'est pas difficile à lire. // Lorsque j'utilise une expression rationnelle complexe en javascript, je garde une copie commentée que je peux éditer lol.
Regular Joe

0

Supposons que vous ayez ce 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>

Et le formulaire URL est www.localhost.com/web_form_response.html?text_input=stack&over=flow

Le texte écrit <p id="response">serastack


0

Ce sera une bonne pratique si vous convertissez votre chaîne en minuscules ou en majuscules car la méthode indexof () est sensible à la casse. Ce sera le cas si votre recherche n'est pas sensible à la casse. Ainsi, pour une recherche qui ne sera pas sensible à la casse, ce sera:

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.