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>
RayLoveless
la source
"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>

JW
la source
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))
NickFitz
la source
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){....}
Sarfraz
la source
23

ainsi:

    <script type="text/javascript">
        $(document).ready(function () {
            if(window.location.href.indexOf("cart") > -1) 
            {
                 alert("your url contains the name franky");
            }
        });
    </script>
Adrian Gonzales
la source
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.

Alin Purcaru
la source
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.

Stephan Bijzitter
la source
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
} 
Suman
la source
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
la source
@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>
Vishnu Dev
la source
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> 
Chandu
la source
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)
{
  ...
}
Yoni Baciu
la source
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");
}
Sudharsan S
la source
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');
}
Ronnie Royston
la source
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');
                }
alemac852
la source
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}]

Regular Joe
la source
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

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