2011-12-29 7 views
13

Estoy validando la URL con la siguiente expresión regular. Quiero validar google.com también pero devuelve falso. Qué se puede cambiar en R.E a continuación para validar google.com.Expresión regular de Javascript para validar la URL

console.log(learnRegExp('http://www.google-com.123')); // false 
console.log(learnRegExp('https://www.google-com.com')); // true 
console.log(learnRegExp('http://google-com.com')); // true 
console.log(learnRegExp('http://google.com')); //true 
console.log(learnRegExp('google.com')); //false 

function learnRegExp(){ 
    return /^(ftp|https?):\/\/+(www\.)?[a-z0-9\-\.]{3,}\.[a-z]{3}$/.test(learnRegExp.arguments[0]); 
} 
+0

¿Estás tratando de validar todos los URL o de lo necesario sólo para 'google.com'? – Unknown

+1

Envolviendo '(ftp | https?): \/\/+ (Www \.)?' Con '(...)?' Funcionará. Sin embargo, ¿esta expresión regular realmente se ajusta a tus necesidades? Quiero decir: '\. [A-z] {3} $' solo excluye * muchas * URL válidas. – jensgram

+0

tratando de validar todas las direcciones URL. ftp puede ser excluido. –

Respuesta

0
/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ 
+0

Parece que google.com no valida. Agregó un código para validar. :-) – Unknown

0

^... símbolo está diciendo lo que comienza con el registro de última tiene sentido, es decir, la cadena no empieza con FTP o HTTP (s). También está diciendo con ...$ que el final de la cadena debe terminar con tres letras que, una vez más, donde falla (línea 2), no termina así. Algunos ajustes menores y debes estar allí.

2

Aquí tienes, necesitas hacer "ftp/http (s): //" no es IMPRESCINDIBLE. Utilizar "?" para esto.

function learnRegExp(){ 
    return /((ftp|https?):\/\/)?(www\.)?[a-z0-9\-\.]{3,}\.[a-z]{3}$/.test(learnRegExp.arguments[0]); 
} 
+0

Como puede ver, solo envolví su '(ftp | https?): \/\ /' En '()?'. – ArVan

+0

¿Cómo hago para que no coincida con un http/https? – San

46

Este validar la dirección URL en general

console.log('http://www.google-com.123.com', validateUrl('http://www.google-com.123.com')); // true 
 
console.log('http://www.google-com.123', validateUrl('http://www.google-com.123')); // false 
 
console.log('https://www.google-com.com', validateUrl('https://www.google-com.com')); // true 
 
console.log('http://google-com.com', validateUrl('http://google-com.com')); // true 
 
console.log('http://google.com', validateUrl('http://google.com')); //true 
 
console.log('google.com', validateUrl('google.com')); //false 
 
console.log('http://www.gfh.', validateUrl('http://www.gfh.')); //false 
 
console.log('http://www.gfh.c', validateUrl('http://www.gfh.c')); //false 
 
console.log('http://www.gfh:800000', validateUrl('http://www.gfh:800000')); //false 
 
console.log('www.google.com ', validateUrl('www.google.com ')); //false 
 
console.log('http://google', validateUrl('http://google')); //false 
 
console.log('//cdnblabla.cloudfront.net/css/app.css', validateUrl('//cdnblabla.cloudfront.net/css/app.css')); //true 
 

 
function validateUrl(value) { 
 
    return /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)[email protected])?(?:(?!(?: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); 
 
}

debe coincidir con

["//www.google.com", "//cdnblabla.cloudfront.net/css/app.css", "http://✪df.ws/123", "http://userid:[email protected]:8080", "http://userid:[email protected]:8080/", "http://[email protected]", "http://[email protected]/", "http://[email protected]:8080", "http://[email protected]:8080/", "http://userid:[email protected]", "http://userid:[email protected]/", "http://142.42.1.1/", "http://142.42.1.1:8080/", "http://➡.ws/䨹", "http://⌘.ws", "http://⌘.ws/", "http://foo.com/blah_(wikipedia)#cite-1", "http://foo.com/blah_(wikipedia)_blah#cite-1", "http://foo.com/unicode_(✪)_in_parens", "http://foo.com/(something)?after=parens", "http://☺.damowmow.com/", "http://code.google.com/events/#&product=browser", "http://j.mp", "ftp://foo.bar/baz", "http://foo.bar/?q=Test%20URL-encoded%20stuff", "http://مثال.إختبار", "http://例子.测试"].map(function(url) { 
 
    console.log(url, validateUrl(url)); 
 
}); 
 

 
function validateUrl(value) { 
 
    return /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)[email protected])?(?:(?!(?: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); 
 
}

fallara

["http://", "http://.", "http://..", "http://../", "http://?", "http://??", "http://??/", "http://#", "http://##", "http://##/", "http://foo.bar?q=Spaces should be encoded", "//", "//a", "///a", "///", "http:///a", "foo.com", "rdar://1234", "h://test", "http:// shouldfail.com", ":// should fail", "http://foo.bar/foo(bar)baz quux", "ftps://foo.bar/", "http://-error-.invalid/", "http://-a.b.co", "http://a.b-.co", "http://0.0.0.0", "http://10.1.1.0", "http://10.1.1.255", "http://224.1.1.1", "http://1.1.1.1.1", "http://123.123.123", "http://3628126748", "http://.www.foo.bar/", "http://www.foo.bar./", "http://.www.foo.bar./", "http://10.1.1.1", "http://10.1.1.254"].map(function(url) { 
 
    console.log(url, validateUrl(url)); 
 
}); 
 

 
function validateUrl(value) { 
 
    return /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)[email protected])?(?:(?!(?: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); 
 
}

Cómo funciona

// protocol identifier 
"(?:(?:(?:https?|ftp):)?//)" 
// user:pass authentication 
"(?:\\S+(?::\\S*)[email protected])?" 
"(?:" 
// IP address exclusion 
// private & local networks 
"(?!(?: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})" 
// IP address dotted notation octets 
// excludes loopback network 0.0.0.0 
// excludes reserved space >= 224.0.0.0 
// excludes network & broacast addresses 
// (first & last IP address of each class) 
"(?:[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]))" 
"|" 
// host name 
"(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)" 
// domain name 
"(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*" 
// TLD identifier 
"(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))" 
// port number 
"(?::\\d{2,5})?" 
// resource path 
"(?:[/?#]\\S*)?" 

Todo esto proviene de esta gist, espero que este llene todas sus necesidades

+0

Esta debería ser la respuesta correcta. – fuzz

+5

Te aplaudo o la expresión regular más larga e incomprensible que he visto en mi vida. – jpschroeder

+0

¿Qué pasa con 'http: // www.gfh',' http: // www.gfh.c' y 'http: //www.gfh: 800000'? –

5

Esto es perfecto para mí. ¡Espero que sea perfecto para otra persona! :)

/^((https?):\/\/)?([w|W]{3}\.)+[a-zA-Z0-9\-\.]{3,}\.[a-zA-Z]{2,}(\.[a-zA-Z]{2,})?$/

+0

¿Qué proporciona esta respuesta que las respuestas anteriores aún no proporcionan? – Louis

+0

@Louis que respuestas anteriores? –

+0

esto es mucho mejor que la respuesta más votada que no funciona porque acepta algo como ww.google o www.google o www.google.c .... pero el suyo funciona perfectamente ... buen trabajo – Juan

Cuestiones relacionadas