javascript - language - jquery validate rules
Intentando validar URL usando JavaScript (18)
Alguien mencionó el plugin Jquery Validation, parece excesivo si solo quiere validar la url, aquí está la línea de expresiones regulares del plugin:
return this.optional(element) || /^(https?|ftp):////(((([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(%[/da-f]{2})|[!/$&''/(/)/*/+,;=]|:)*@)?(((/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5])/.(/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5])/.(/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5])/.(/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5]))|((([a-z]|/d|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(([a-z]|/d|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])*([a-z]|/d|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])))/.)+(([a-z]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(([a-z]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])*([a-z]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])))/.?)(:/d*)?)(//((([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(%[/da-f]{2})|[!/$&''/(/)/*/+,;=]|:|@)+(//(([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(%[/da-f]{2})|[!/$&''/(/)/*/+,;=]|:|@)*)*)?)?(/?((([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(%[/da-f]{2})|[!/$&''/(/)/*/+,;=]|:|@)|[/uE000-/uF8FF]|//|/?)*)?(/#((([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(%[/da-f]{2})|[!/$&''/(/)/*/+,;=]|:|@)|//|/?)*)?$/i.test(value);
Aquí es de donde lo obtuvieron: http://projects.scottsplayground.com/iri/
Señalado por @nhahtdh Esto se ha actualizado a:
// Copyright (c) 2010-2013 Diego Perini, MIT licensed
// https://gist.github.com/dperini/729294
// see also https://mathiasbynens.be/demo/url-regex
// modified to allow protocol-relative URLs
return this.optional( element ) || /^(?:(?:(?:https?|ftp):)?////)(?:/S+(?::/S*)?@)?(?:(?!(?:10|127)(?:/./d{1,3}){3})(?!(?:169/.254|192/.168)(?:/./d{1,3}){2})(?!172/.(?:1[6-9]|2/d|3[0-1])(?:/./d{1,3}){2})(?:[1-9]/d?|1/d/d|2[01]/d|22[0-3])(?:/.(?:1?/d{1,2}|2[0-4]/d|25[0-5])){2}(?:/.(?:[1-9]/d?|1/d/d|2[0-4]/d|25[0-4]))|(?:(?:[a-z/u00a1-/uffff0-9]-*)*[a-z/u00a1-/uffff0-9]+)(?:/.(?:[a-z/u00a1-/uffff0-9]-*)*[a-z/u00a1-/uffff0-9]+)*(?:/.(?:[a-z/u00a1-/uffff]{2,})).?)(?::/d{2,5})?(?:[/?#]/S*)?$/i.test( value );
Quiero validar una URL y mostrar un mensaje. A continuación está mi código:
$("#pageUrl").keydown(function(){
$(".status").show();
var url = $("#pageUrl").val();
if(isValidURL(url)){
$.ajax({
type: "POST",
url: "demo.php",
data: "pageUrl="+ url,
success: function(msg){
if(msg == 1 ){
$(".status").html(''<img src="images/success.gif"/><span><strong>SiteID:</strong>12345678901234456</span>'');
}else{
$(".status").html(''<img src="images/failure.gif"/>'');
}
}
});
}else{
$(".status").html(''<img src="images/failure.gif"/>'');
}
});
function isValidURL(url){
var RegExp = /(ftp|http|https):////(/w+:{0,1}/w*@)?(/S+)(:[0-9]+)?(//|//([/w#!:.?+=&%@!/-//]))?/;
if(RegExp.test(url)){
return true;
}else{
return false;
}
}
Mi problema ahora es que mostrará un mensaje de error incluso cuando ingrese una URL adecuada hasta que coincida con la expresión regular, y devuelve verdadero incluso si la URL es algo así como "http://wwww"
.
Aprecio tus sugerencias
Aquí hay una expresión regular que puede ajustarse a la factura (es muy larga):
/^(?:/u0066/u0069/u006C/u0065/u003A/u002F{2}(?:/u002F{2}(?:(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])*/u0040)?(?:/u005B(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){6}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|/u003A{2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){5}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){4}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A)?[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){3}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){0,2}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){0,3}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){0,4}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){0,5}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){0,6}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2})/u005D|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])|(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039](?:(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D]+)?[/u0041-/u005A/u0061-/u007A/u0030-/u0039])?|(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039](?:(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D]+)?[/u0041-/u005A/u0061-/u007A/u0030-/u0039])?/u002E)+[/u0041-/u005A/u0061-/u007A/u0030-/u0039](?:(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D]+)?[/u0041-/u005A/u0061-/u007A/u0030-/u0039])?))(?:/u003A(?:/u0030-/u0035/u0030-/u0039{0,4}|/u0036/u0030-/u0034/u0030-/u0039{3}|/u0036/u0035/u0030-/u0034/u0030-/u0039{2}|/u0036/u0035/u0035/u0030-/u0032/u0030-/u0039|/u0036/u0035/u0035/u0033/u0030-/u0035))?(?:/u002F(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])*)*|/u002F(?:(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])+(?:/u002F(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])*)*)?|(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])+(?:/u002F(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])*)*)|[/u0041-/u005A/u0061-/u007A][/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002B/u002D/u002E]*/u003A(?:/u002F{2}(?:(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])*/u0040)?(?:/u005B(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){6}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|/u003A{2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){5}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){4}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A)?[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){3}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){0,2}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){0,3}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){0,4}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035]))|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){0,5}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}|(?:(?:[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4}/u003A){0,6}[/u0030-/u0039/u0041-/u0046/u0061-/u0066]{1,4})?/u003A{2})/u005D|(?:(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])/u002E){3}(?:[/u0030-/u0039]|[/u0031-/u0039][/u0030-/u0039]|/u0031[/u0030-/u0039]{2}|/u0032[/u0030-/u0034][/u0030-/u0039]|/u0032/u0035[/u0030-/u0035])|(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039](?:(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D]+)?[/u0041-/u005A/u0061-/u007A/u0030-/u0039])?|(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039](?:(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D]+)?[/u0041-/u005A/u0061-/u007A/u0030-/u0039])?/u002E)+[/u0041-/u005A/u0061-/u007A/u0030-/u0039](?:(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D]+)?[/u0041-/u005A/u0061-/u007A/u0030-/u0039])?))(?:/u003A(?:/u0030-/u0035/u0030-/u0039{0,4}|/u0036/u0030-/u0034/u0030-/u0039{3}|/u0036/u0035/u0030-/u0034/u0030-/u0039{2}|/u0036/u0035/u0035/u0030-/u0032/u0030-/u0039|/u0036/u0035/u0035/u0033/u0030-/u0035))?(?:/u002F(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])*)*|/u002F(?:(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])+(?:/u002F(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])*)*)?|(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])+(?:/u002F(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])*)*)(?:/u003F(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040/u002F/u003F]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])*)?(?:/u0023(?:[/u0041-/u005A/u0061-/u007A/u0030-/u0039/u002D/u002E/u005F/u007E/u0021/u0024/u0026/u0027/u0028/u0029/u002A/u002B/u002C/u003B/u003D/u003A/u0040/u002F/u003F]|/u0025[/u0030-/u0039/u0041-/u0046/u0061-/u0066][/u0030-/u0039/u0041-/u0046/u0061-/u0066])*)?)$/
Hay algunas advertencias sobre su uso, es decir, no valida los URI que contienen información adicional después del nombre de usuario (por ejemplo, "nombre de usuario: contraseña"). Además, solo las direcciones IPv6 pueden estar contenidas dentro de la sintaxis literal de IP y la sintaxis "IPvFuture" se ignora actualmente y no validará esta expresión regular. Los números de puerto también están limitados a estar entre 0 y 65.535. Además, solo el esquema de archivos puede usar barras diagonales triples (por ejemplo, "file: /// etc / sysconfig") y puede ignorar tanto la consulta como las partes de fragmentos de un URI. Finalmente, está orientado hacia URIs regulares y no IRI, de ahí el amplio enfoque en el conjunto de caracteres ASCII.
Esta expresión regular podría ampliarse, pero ya es compleja y lo suficientemente larga como es. Tampoco puedo garantizar que va a ser "100% exacto" o "libre de errores", pero debe validar correctamente los URI para todos los esquemas.
Tendrá que hacer una verificación adicional para cualquier requisito específico del esquema o hacer la normalización de URI, ya que esta expresión regular validará una gama muy amplia de URI.
Demostración: http://jsbin.com/uzimeb/1/edit
function checkURL(value) {
var urlregex = new RegExp("^(http|https|ftp)/://([a-zA-Z0-9/./-]+(/:[a-zA-Z0-9/.&%/$/-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)/.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9/-]+/.)*[a-zA-Z0-9/-]+/.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(/:[0-9]+)*(/($|[a-zA-Z0-9/./,/?/'///+&%/$#/=~_/-]+))*$");
if (urlregex.test(value)) {
return (true);
}
return (false);
}
En una situación similar, me salí con esto:
someUtils.validateURL = function(url) {
var parser = document.createElement(''a'');
try {
parser.href = url;
return !!parser.hostname;
} catch (e) {
return false;
}
};
es decir, ¿por qué inventar la rueda si los navegadores pueden hacerlo por usted? Pero, por supuesto, esto solo funcionará en el navegador.
hay varias partes de la URL analizada exactamente cómo lo interpretaría el navegador:
parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port; // => "8080"
parser.pathname; // => "/path/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
Al usarlos, puede mejorar su función de validación según los requisitos. El único inconveniente es que aceptará URL relativas y usará el host y el puerto del servidor de la página actual. Pero puede usarlo para su beneficio, volviendo a ensamblar la URL de las piezas y siempre pasándola por completo a su servicio AJAX.
Lo que validateURL
no aceptará es un URL no válido, por ejemplo, http:/:8883
devolverá falso, pero :1234
es válido y se interpreta como http://pagehost.example.com/:1234
es decir, como una ruta relativa.
ACTUALIZAR
Este enfoque ya no funciona con Chrome y otros navegadores WebKit. Incluso cuando la URL no es válida, el nombre de host se llena con algún valor, por ejemplo, tomado de la base
. Todavía es útil analizar partes de la URL, pero no permitirá validar una.
Posible mejor enfoque sin-propio-analizador es usar var parsedURL = new URL(url)
y detectar excepciones. Ver, por ejemplo, URL API . Compatible con todos los principales navegadores y NodeJS, aunque todavía se considera experimental.
Encontré un gran recurso para comparar diferentes soluciones: https://mathiasbynens.be/demo/url-regex
Según esa página, solo la solución de diegoperini pasa todas las pruebas. Aquí está esa expresión regular:
_^(?:(?:https?|ftp)://)(?:/S+(?::/S*)?@)?(?:(?!10(?:/./d{1,3}){3})(?!127(?:/./d{1,3}){3})(?!169/.254(?:/./d{1,3}){2})(?!192/.168(?:/./d{1,3}){2})(?!172/.(?:1[6-9]|2/d|3[0-1])(?:/./d{1,3}){2})(?:[1-9]/d?|1/d/d|2[01]/d|22[0-3])(?:/.(?:1?/d{1,2}|2[0-4]/d|25[0-5])){2}(?:/.(?:[1-9]/d?|1/d/d|2[0-4]/d|25[0-4]))|(?:(?:[a-z/x{00a1}-/x{ffff}0-9]+-?)*[a-z/x{00a1}-/x{ffff}0-9]+)(?:/.(?:[a-z/x{00a1}-/x{ffff}0-9]+-?)*[a-z/x{00a1}-/x{ffff}0-9]+)*(?:/.(?:[a-z/x{00a1}-/x{ffff}]{2,})))(?::/d{2,5})?(?:/[^/s]*)?$_iuS
Esto es lo que funcionó para mí:
function validateURL(value) {
return /^(https?|ftp):////(((([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(%[/da-f]{2})|[!/$&''/(/)/*/+,;=]|:)*@)?(((/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5])/.(/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5])/.(/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5])/.(/d|[1-9]/d|1/d/d|2[0-4]/d|25[0-5]))|((([a-z]|/d|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(([a-z]|/d|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])*([a-z]|/d|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])))/.)+(([a-z]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(([a-z]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])*([a-z]|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])))/.?)(:/d*)?)(//((([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(%[/da-f]{2})|[!/$&''/(/)/*/+,;=]|:|@)+(//(([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(%[/da-f]{2})|[!/$&''/(/)/*/+,;=]|:|@)*)*)?)?(/?((([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(%[/da-f]{2})|[!/$&''/(/)/*/+,;=]|:|@)|[/uE000-/uF8FF]|//|/?)*)?(/#((([a-z]|/d|-|/.|_|~|[/u00A0-/uD7FF/uF900-/uFDCF/uFDF0-/uFFEF])|(%[/da-f]{2})|[!/$&''/(/)/*/+,;=]|:|@)|//|/?)*)?$/i.test(value);
}
a partir de ahí es solo cuestión de llamar a la función para obtener una respuesta verdadera o falsa:
validateURL(urltovalidate);
Importar en un paquete npm como
https://www.npmjs.com/package/valid-url
y utilízalo para validar tu url.
Intente editar su función isValidURL
siguiente manera:
function isValidURL(url) {
var encodedURL = encodeURIComponent(url);
var isValid = false;
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodedURL + "%22&format=json",
type: "get",
async: false,
dataType: "json",
success: function(data) {
isValid = data.query.results != null;
},
error: function(){
isValid = false;
}
});
return isValid;
}
Esto debería funcionar.
Mi solución:
function isValidUrl(t)
{
return t.match(/^(http|https|ftp):////(([A-Z0-9][A-Z0-9_-]*)(/.[A-Z0-9][A-Z0-9_-]*)+)(:(/d+))?//?/i)
}
No es práctico analizar URL utilizando expresiones regulares. Una implementación completa de las reglas de RFC1738 daría como resultado una expresión regular enormemente larga (suponiendo que sea posible). Ciertamente, su expresión actual falla muchas URL válidas y pasa las inválidas.
En lugar:
a. utilice un analizador de URL adecuado que realmente siga las reglas reales. (No conozco ninguno para JavaScript, probablemente sería excesivo. Sin embargo, podrías hacerlo por el lado del servidor). O,
segundo. simplemente recorte cualquier espacio inicial o final, luego verifique que tenga uno de sus esquemas preferidos en el frente (típicamente ''http: //'' o ''https: //''), y déjelo así. O,
do. intente utilizar la URL y ver qué se encuentra al final, por ejemplo, enviándola a la solicitud HTTP HEAD desde el servidor. Si obtiene un error 404 o de conexión, probablemente sea incorrecto.
vuelve verdadero incluso si url es algo así como " http: // wwww ".
Bueno, esa es de hecho una URL perfectamente válida.
Si desea verificar si realmente existe un nombre de host como ''wwww'', no tiene más remedio que buscarlo en el DNS. Nuevamente, esto sería un código del lado del servidor.
Puede usar la URL API que es estándar recientemente. El soporte del navegador es incompleto en el mejor de los casos, consulte el enlace. Se garantiza que la new URL(str)
arrojará TypeError
para las URL no válidas.
Como se indicó anteriormente, http://wwww
es una URL válida.
Revisé muchos validadores de URL en google y nadie trabaja para mí. Por ejemplo, me gustaría ver que sea válido en enlaces como ''aa.com''. Me gusta el cheque tonto para el signo de punto en cadena.
function isValidUri(str) {
var dotIndex = str.indexOf(''.'');
return (dotIndex > 0 && dotIndex < str.length - 2);
}
No debería permanecer al comienzo y al final de la cadena (por ahora no tenemos nombres de dominio de nivel superior con un carácter).
Sé que es una pregunta bastante antigua, pero como no tiene una respuesta aceptada, le sugiero que use el marco URI.js: https://github.com/medialize/URI.js
Puede usarlo para verificar el URI con formato incorrecto usando un bloque try / catch:
function isValidURL(url)
{
try {
(new URI(url));
return true;
}
catch (e) {
// Malformed URI
return false;
}
}
Por supuesto, considerará algo así como "% @" como un URI relativo bien formado ... Por lo tanto, le sugiero que lea la API URI.js para realizar más comprobaciones, por ejemplo, si desea asegurarse de que el usuario ingresó un formulario bien formado. URL absoluta puede hacer esto:
function isValidURL(url)
{
try {
var uri = new URI(url);
// URI has a scheme and a host
return (!!uri.scheme() && !!uri.host());
}
catch (e) {
// Malformed URI
return false;
}
}
Si está buscando una expresión regular más confiable, consulte RegexLib. Esta es la página que probablemente le interese:
http://regexlib.com/Search.aspx?k=url
En cuanto a los mensajes de error que se muestran mientras la persona aún está escribiendo, cambie el evento de keydown
a blur
y luego solo se verificará una vez que la persona pase al siguiente elemento.
También escribí una función de validación de URL basada en rfc1738 y rfc3986 para verificar las URL http y https. Intento mantener este modular, por lo que puede mantenerse mejor y adaptarse a los requisitos propios.
El RegExp en una línea se muestra al final de esta publicación.
RegExp acepta URLs HTTP y HTTPS con algún dominio internacional o número IPv4. IPv6 aún no es compatible.
window.isValidURL = (function() {// wrapped in self calling function to prevent global pollution
//URL pattern based on rfc1738 and rfc3986
var rg_pctEncoded = "%[0-9a-fA-F]{2}";
var rg_protocol = "(http|https)://////";
var rg_userinfo = "([a-zA-Z0-9$//-_.+!*''(),;:&=]|" + rg_pctEncoded + ")+" + "@";
var rg_decOctet = "(25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-9][0-9]|[0-9])"; // 0-255
var rg_ipv4address = "(" + rg_decOctet + "(//." + rg_decOctet + "){3}" + ")";
var rg_hostname = "([a-zA-Z0-9//-//u00C0-//u017F]+//.)+([a-zA-Z]{2,})";
var rg_port = "[0-9]+";
var rg_hostport = "(" + rg_ipv4address + "|localhost|" + rg_hostname + ")(:" + rg_port + ")?";
// chars sets
// safe = "$" | "-" | "_" | "." | "+"
// extra = "!" | "*" | "''" | "(" | ")" | ","
// hsegment = *[ alpha | digit | safe | extra | ";" | ":" | "@" | "&" | "=" | escape ]
var rg_pchar = "a-zA-Z0-9$//-_.+!*''(),;:@&=";
var rg_segment = "([" + rg_pchar + "]|" + rg_pctEncoded + ")*";
var rg_path = rg_segment + "(///" + rg_segment + ")*";
var rg_query = "//?" + "([" + rg_pchar + "/?]|" + rg_pctEncoded + ")*";
var rg_fragment = "//#" + "([" + rg_pchar + "/?]|" + rg_pctEncoded + ")*";
var rgHttpUrl = new RegExp(
"^"
+ rg_protocol
+ "(" + rg_userinfo + ")?"
+ rg_hostport
+ "(///"
+ "(" + rg_path + ")?"
+ "(" + rg_query + ")?"
+ "(" + rg_fragment + ")?"
+ ")?"
+ "$"
);
// export public function
return function (url) {
if (rgHttpUrl.test(url)) {
return true;
} else {
return false;
}
};
})();
RegExp en una línea:
var rg = /^(http|https):////(([a-zA-Z0-9$/-_.+!*''(),;:&=]|%[0-9a-fA-F]{2})+@)?(((25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-9][0-9]|[0-9])(/.(25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-9][0-9]|[0-9])){3})|localhost|([a-zA-Z0-9/-/u00C0-/u017F]+/.)+([a-zA-Z]{2,}))(:[0-9]+)?(//(([a-zA-Z0-9$/-_.+!*''(),;:@&=]|%[0-9a-fA-F]{2})*(//([a-zA-Z0-9$/-_.+!*''(),;:@&=]|%[0-9a-fA-F]{2})*)*)?(/?([a-zA-Z0-9$/-_.+!*''(),;:@&=//?]|%[0-9a-fA-F]{2})*)?(/#([a-zA-Z0-9$/-_.+!*''(),;:@&=//?]|%[0-9a-fA-F]{2})*)?)?$/;
mejor expresión regular que encontré en http://angularjs.org/
var urlregex = /^(ftp|http|https):////(/w+:{0,1}/w*@)?(/S+)(:[0-9]+)?(//|//([/w#!:.?+=&%@!/-//]))?$/;
function validateURL(textval) {
var urlregex = /^(https?|ftp):////([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(/.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+/.)*[a-zA-Z0-9-]+/.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(//($|[a-zA-Z0-9.,?''//+&%$#=~_-]+))*$/;
return urlregex.test(textval);
}
Esto puede ser cierto para URL como:
http://.com/questions/1303872/url-validation-using-javascript
o:
http://regexlib.com/DisplayPatterns.aspx?cattabindex=1&categoryId=2
var RegExp = (/^HTTP|HTTP|http(s)?:////(www/.)?[A-Za-z0-9]+([/-/.]{1}[A-Za-z0-9]+)*/.[A-Za-z]{2,40}(:[0-9]{1,40})?(//.*)?$/);