J'ai un champ input
qui enregistre une URL, je voudrais que cette entrée enregistrée reconnaisse quand "Http //" est absent du début de la variable mais n'a aucune idée par où commencer ... est-il possible de vérifier seulement une partie d'une chaîne? - alors avoir une fonction qui ajoutera si nécessaire?Ajout de "http: //" à une URL qui ne contient pas déjà "http: //"
Répondre
Une solution simple pour ce que vous voulez est la suivante:
var prefix = 'http://';
if (s.substr(0, prefix.length) !== prefix)
{
s = prefix + s;
}
Cependant, il y a quelques choses que vous devriez être au courant ...
Le test ici est sensible à la casse . Cela signifie que si la chaîne est initialement Http://example.com
cela la changera en http://Http://example.com
ce qui n'est probablement pas ce que vous voulez. Vous ne devriez probablement pas modifier n'importe quelle chaîne commençant par foo://
sinon vous pourriez vous retrouver avec quelque chose comme http://https://example.com
.
D'autre part, si vous recevez une entrée telle que example.com?redirect=http://othersite.com
alors vous ne voulez probablement préfixer http://
si juste la recherche de ://
pourrait ne pas être assez bon pour une solution générale.
Approches alternatives
En utilisant une expression régulière:
if (!s.match(/^[a-zA-Z]+:\/\//)) { s = 'http://' + s; }
En utilisant une bibliothèque URI telle que l'analyse syntaxique JS-URI.
if (new URI(s).scheme === null) { s = 'http://' + s; }
Questions connexes
Ceci est recommandé. – Marwelln
Bonne solution. Continuez –
Note pour les URLs relatives au protocole (URL commençant par) '//', cela peut avoir des résultats inattendus. ex: '// example.com/foo', le code ci-dessus le remplacerait par' http: //// example.com/foo' –
Quelque chose comme ça (écrire par la mémoire)?
if (url.toUpper(url.substring(0, 7) != "HTTP://")
url = "http://" + url;
'url.substring (0, 7) .toUpperCase()' –
Vous pouvez utilisez "StartsWith" un membre de System.String.
if (url.ToUpper().StartsWith("HTTP://"))
{
}
Ce n'est pas C#. – quantumSoup
if (estNotC#) {return "StartWith n'existe pas."; } – Hello71
La beauté de Javascript est que cela peut être fait. –
Lifted du Linkenizer (nul ne l'esprit)
link = (link.indexOf('://') === -1) ? 'http://' + link : link;
Cela préfixer 'http://'
-link
si elle ne trouve pas le protocole ://
indiquant. Cela ne fonctionnera pas bien si ://
se produit ailleurs dans la chaîne, mais c'est assez bon.
Exemples:
http://www.google.com -> http://www.google.com
ftp://google.com -> ftp://google.com
www.google.com -> http://www.google.com
google.com -> http://google.com
Puisque vous avez dit que vous enregistrez cette URL, ce serait une meilleure idée de le faire sur le côté serveur, afin que les clients qui ont js désactivé ne sera pas gâcher les liens.
Gardez à l'esprit que cette va échouer pour les liens 'mailto:'. –
Si vous voulez aussi « https: // », je voudrais utiliser une expression régulière comme ceci:
if (!/^https?:\/\//i.test(url)) {
url = 'http://' + url;
}
Si vous n'êtes pas familier avec les expressions régulières, voici ce que chaque partie signifie.
^
- Seulement match au début de la chaînehttp
- Faites correspondre la chaîne "http"s?
- match En option, un "s":
- Faites correspondre les deux points\/\/
- Échappe les caractères "/" car ils marquent le début/la fin de l'expression régulière- Le "i" après l'expression régulière le fait insensible à la casse il correspondra à "http: //", etc.
n'aide pas si l'URL a 'Http:' ou 'HTTP:' déjà. –
Vous devez savoir que '' '!/^ Https?: \/\ // i.test (undefined)' '' est '' '' '' '' '' 'true'''. Je suggère de vérifier si '' '' url''' n'est pas falsey: '' 'si (!! url &&!/^ Https?: \/\ // i.test (url)) {...' '' –
Utilisez '' '!/^ (Https?:)? \/\ // i.test (url)' '' pour gérer aussi //:example.com. –
if (url.indexOf('http://') != 0)
url = 'http://' + url;
j'utilise ce qui est partiellement prise de php docs
$scheme = parse_url($link, PHP_URL_SCHEME);
if (empty($scheme)) {
$link = 'http://' . ltrim($link, '/');
}
Voici ce que j'utilise pour gratification instantanée. en utilisant l'écouteur keyup dans jquery.
$('#url').keyup(function() {
if ( ($(this).val().length >=5) && ($(this).val().substr(0, 5) != 'http:') && ($(this).val().substr(0, 5) != 'https')) {
$(this).val('http://' + $(this).val());
}
});
merci, utilisé ceci, juste changé le sélecteur JQuery à '' '$ ('input [type = url]')' '' – dirk
Je modifié la réponse de Byers @ Mark d'inclure "https: //" aussi bien.
function formatUrl(url){
var httpString = 'http://'
, httpsString = 'https://'
;
if (url.substr(0, httpString.length) !== httpString && url.substr(0, httpsString.length) !== httpsString)
url = httpString + url;
return url;
}
J'ai modifié les réponses @Morgan Taylor et @Mark Byer pour qu'elles ne soient pas sensibles à la casse. Fonctionne avec http: // et https: //
function formatUrl(url)
{
var httpString = "http://";
var httpsString = "https://";
if (url.substr(0, httpString.length).toLowerCase() !== httpString && url.substr(0, httpsString.length).toLowerCase() !== httpsString)
url = httpString + url;
return url;
}
Ci-dessous vérifie extrait de code pour:
- vérifie si url n'est pas vide
- Supprime espaces parasites au début ou à la fin
chèques pour http://example.com, https://example.com ET //example.com
if (!!url && !!url.trim()) { //Check if url is not blank url = url.trim(); //Removes blank spaces from start and end if (!/^(https?:)?\/\//i.test(url)) { //Checks for if url doesn't match either of: http://example.com, https://example.com AND //example.com url = 'http://' + url; //Prepend http:// to the URL } } else { //Handle empty url }
- 1. bouton Twitter 'url' ne contient pas une URL valide
- 2. Comment ajouter des variables à une URL qui contient déjà des variables?
- 3. Uri.IsWellFormedUriString permet http: // http: // <url>
- 4. URL du client relatif à l'URL http
- 5. Http connexion URL ne peut pas lire complètement
- 6. HTTP URL Blacklist driver
- 7. ISAPI Url Rewrite - de http à https
- 8. paramètres d'entrée url http
- 9. ASP.NET: Ajout à la réponse HTTP
- 10. URL de séparation requête http
- 11. erreur WCF intermittente: Collection contient déjà une adresse avec le schéma http
- 12. IIS7 URL Rewrite - RegExp pour correspondre à une chaîne qui ne contient pas de DOT
- 13. Eviter Cette collection contient déjà une adresse avec le schéma http
- 14. XMLHttpRequest ne fonctionne pas avec http
- 15. post http Essayé ne fonctionne pas
- 16. Puis-je utiliser javascript pour ajouter un signet qui n'est pas une URL http?
- 17. url regex sans http: // www
- 18. Est-il possible d'urlencode une URL qui contient une url codée URL?
- 19. Http Status Code 301 à une page qui renvoie 410
- 20. Hudson: écouteur HTTP déjà utilisé erreur
- 21. xhrPost: d'une vue http à une URL https
- 22. php socket http post ne fonctionne pas
- 23. Les demandes simultanées à un gestionnaire HTTP ne fonctionnent pas
- 24. PHP http ne pas enregistrer les sessions
- 25. socket ouvert à http url et récupérer une donnée
- 26. IIS7 ne retourne pas HTTP 400 pour une mauvaise requête
- 27. Comment vérifier si une chaîne contient http: // au début
- 28. Réécrivez une URL qui a déjà été redirigée?
- 29. URL Rewrite de http://example.com/blog/ à http://blog.example.com/~~V~~singular~~3rd
- 30. Comment utiliser FileDescriptor avec des URL HTTP
https également une considération? –