2017-09-26 1 views
0

Si je reçois l'URL en javascript à travers window.location.href, comment puis-je vérifier si je suis ailleurs que dans le répertoire racine basé sur la chaîne d'URL que je viens de recevoir. Avec une regex.regex pour vérifier si elle racine du répertoire d'url, "", "/", "/index.php"

Si la chaîne URL est "https://stackoverflow.com" et je partage par ce (protocole + domaine + tld), je veux le regex au match:

  • Rien ""
  • espaces blancs «/\ s + »
  • barre oblique "/"
  • index.php "index.php"

Mais pas "/ questions", "/ questions/demande", ou un index.php ou tout fichier dans un répertoire autre que la racine du site Web comme "questions/ask/index.php"

+0

@ Chris85 Parce que je fais quelque chose sur le côté client basé sur l'URL . Le site est construit sur un framework PHP, d'où index.php, mais ce que je fais doit se passer du côté client dans js – wordSmith

Répondre

2

Cette regex correspondra à vos besoins.

^(|\/(?:index\.php)?|\s+)$ 

^$ sont des ancres qui nécessitent un match de chaîne complète. (^ mène, $ se termine)
() est un regroupement
| sépare une correspondance possible valide. Le ?: est un groupe sans capture (en réalité, les deux groupes peuvent être des groupes sans capture).
Nous avons simplifié une modification en utilisant le index.php facultatif (le suivi ? rend le groupe facultatif).
est au moins un espace.
et menant | permis pour rien d'être présent.

Il pourrait également être écrit:

^(?:|\/|\/index\.php|\s+|)$ 

Utilisation fonctionnelle JS:

var url = '', 
    regex = /^(?:|\/|\/index\.php|\s+|)$/; 
if(url.match(regex)) { 
    console.log('TRUE'); 
} else{ 
    console.log('FALSE'); 
} 

Démo: https://jsfiddle.net/Lksghj4h/

+0

Hmmm cela prend tout son sens, mais quand je l'essaie sur ce site (Regexr.com) et en mon code, à l'intérieur d'un '.indexOf()', il ne correspond pas? Contrairement au lien que vous avez posté. Voici la ligne exacte: 'url_arr.indexOf (/^(| \/(?: index \ .php)? | \ S + |) $/g)> - 1'. Il est évalué à false quand url_arr est ["", "/"] – wordSmith

+0

Je ne suis pas beaucoup d'un JS'r mais ne devrait-il pas être 'match', https://developer.mozilla.org/en-US/docs/Web/JavaScript/Référence/Global_Objects/String/match? Démo: https://jsfiddle.net/Lksghj4h/ – chris85

+0

Cela peut être non plus, regexp est censé fonctionner dans .replace() et .indexOf() aussi. En tout cas, merci pour l'aide! – wordSmith