Tengo un campo input
que guarda una URL, me gustaría que esta entrada guardada se reconozca cuando "Http //" está ausente desde el comienzo de la variable, pero no tiene idea de por dónde empezar ... ¿es posible verificar solo una parte de una cadena? - Entonces, ¿tiene una función que se agregará si es necesario?Anteponiendo "http: //" a una URL que ya no contiene "http: //"
Respuesta
Una solución simple para lo que quiere es la siguiente:
var prefix = 'http://';
if (s.substr(0, prefix.length) !== prefix)
{
s = prefix + s;
}
Sin embargo, hay algunas cosas que usted debe tener en cuenta ...
La prueba aquí es entre mayúsculas y minúsculas . Esto significa que si la cadena es inicialmente Http://example.com
, esto lo cambiará a http://Http://example.com
, que probablemente no sea lo que usted quiere. Probablemente tampoco deba modificar ninguna cadena que comience por foo://
; de lo contrario, podría terminar con algo como http://https://example.com
.
Por otro lado si recibe una entrada como example.com?redirect=http://othersite.com
entonces es probable que quieren anteponer http://
por lo que sólo la búsqueda de ://
podría no ser lo suficientemente bueno para una solución general.
Enfoques alternativos
Usando una expresión regular:
if (!s.match(/^[a-zA-Z]+:\/\//)) { s = 'http://' + s; }
usando una biblioteca de análisis sintáctico URI como JS-URI.
if (new URI(s).scheme === null) { s = 'http://' + s; }
preguntas relacionadas
Esto es recomendado. – Marwelln
Buena solución. Seguir así –
Nota para el protocolo relativo URLS (URL que comienzan con) '//', esto puede tener resultados inesperados. ex: '// example.com/foo', el código anterior lo cambiaría a' http: //// example.com/foo' –
Algo como esto (escritura de memoria)?
if (url.toUpper(url.substring(0, 7) != "HTTP://")
url = "http://" + url;
'url.substring (0, 7) .toUpperCase()' –
Puede utilice "StartsWith" un miembro de System.String.
if (url.ToUpper().StartsWith("HTTP://"))
{
}
Esto no es C#. – quantumSoup
if (isNotC#) {return "StartWith does not exists."; } – Hello71
La belleza de Javascript es que esto se puede hacer. –
levanta de la Linkenizer (Null no importa)
link = (link.indexOf('://') === -1) ? 'http://' + link : link;
Este antepondrá 'http://'
-link
si no puede encontrar la ://
indicación de protocolo. Esto no funcionará bien si ://
aparece en otra parte de la cadena, pero es lo suficientemente bueno.
Ejemplos:
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
ya que dijo que está guardando este URL, sería una mejor idea de hacer esto en el lado del servidor, por lo que los clientes que tienen JS desactivado no se hace un lío hasta los enlaces.
Tenga en cuenta que esto fallará para los enlaces 'mailto:'. –
Si también desea permitir "https: //", me gustaría utilizar una expresión regular como esto:
if (!/^https?:\/\//i.test(url)) {
url = 'http://' + url;
}
Si usted no está familiarizado con las expresiones regulares, esto es lo que significa cada parte.
^
- Sólo partido en el principio de la cadenahttp
- Unir la cadena literal "http"s?
- coincidir Opcionalmente una "s":
- Unir dos puntos\/\/
- Escapar los caracteres "/" ya que marcan el comienzo/final de la expresión regular- La "i" después de la expresión regular lo hace entre mayúsculas y minúsculas por lo que coincidirá con "http: //", etc.
no ayuda si la url ya tiene 'Http:' o 'HTTP:'. –
Debe tener en cuenta que '' '!/^ Https?: \/\ // i.test (undefined)' '' es '' 'true'''. Sugiero verificar si '' 'url''' no es falsey: ' '' if (!! url &&!/^ Https?: \/\ // i.test (url)) {... ' '' –
Use '' '!/^ (Https?:)? \/\ // i.test (url)' '' para manejar //:example.com también. –
if (url.indexOf('http://') != 0)
url = 'http://' + url;
Yo personalmente uso este, que se toma parcialmente de documentos php
$scheme = parse_url($link, PHP_URL_SCHEME);
if (empty($scheme)) {
$link = 'http://' . ltrim($link, '/');
}
Esto es lo que yo uso para gratificación instantánea. utilizando el oyente keyup en 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());
}
});
gracias, usado esto, acaba de cambiar el selector JQuery a '' '$ ('input [type = url]')' '' – dirk
Alteré la respuesta @Mark Byers para incluir "https: //" también.
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;
}
He alterado las respuestas de @Morgan Taylor's y @Mark Byer para ser insensible a mayúsculas y minúsculas. Funciona con http: // y 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;
}
A continuación cheques del fragmento de código para:
- Comprueba si el URL no está en blanco
- Elimina espacios en blanco callejeros al principio o al final
cheques para http://example.com, https://example.com Y //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. Comprobar la cadena que contiene la URL para "http: //"
- 2. URL sin "http | https"
- 3. Comprobación de si la cadena contiene "http: //"
- 4. Compruebe si una URL tiene http: // prefijo
- 5. Cómo redirigir a una url que contiene un ancla (#)?
- 6. Error de inicio del servicio WCF "Esta colección ya contiene una dirección con el esquema http"
- 7. Detecta que los encabezados http de asp.net ya se enviaron
- 8. cómo usar HttpListener para recibir HTTP Post que contiene XML
- 9. struts2 ya no acepta los parámetros del mapa http?
- 10. Asignación de solicitudes HTTP a respuestas HTTP
- 11. ¿La URL de solicitud HTTP no forma parte del encabezado de solicitud HTTP?
- 12. ¿Es posible urlencode una url que contiene una url codificada en url?
- 13. Detectando una url usando preg_match? sin http: // en la cadena
- 14. HTTP Status 405 - método HTTP GET no es compatible con esta URL
- 15. HTTP Status 405 - HTTP POST no es compatible con este servlet java de URL
- 16. Cómo verificar si una cadena contiene http: // al inicio
- 17. ¿Cómo uso FileDescriptor con las URL HTTP
- 18. jQuery Get Request on HTTP URL
- 19. Cómo agregar http: // si no existe en la URL?
- 20. El método HTTP GET no es compatible con esta URL
- 21. Mapa Protocolo de URL personalizado a HTTP (¿usando NSURLProtocol?)
- 22. Cómo redirigir a una cadena de consulta URL que contiene caracteres no ASCII en DJANGO?
- 23. Http POST bloquea el puerto en URL
- 24. Reescritura de URL https: // http: // en IIS7
- 25. ¡Falló la solicitud HTTP! HTTP/1.1 505 HTTP Version No admitido error
- 26. HTTP GET método no es compatible con esta URL
- 27. ASP.NET 4.0 URL de enrutamiento HTTP Error 404.0 - No encontrado
- 28. Respondiendo a una petición HTTP POST idempotente
- 29. php curl - accediendo a url con autenticación http (necesita ayuda)
- 30. URL actual sin parámetros, hachís, http (s): //
también una consideración? –