validate validar test regulares probar para online expresiones .net regex

.net - test - Regex para validar URI



validar url regex (6)

¿Cómo se produce una expresión regular que coincida solo con el URI válido? La descripción de los URI se puede encontrar aquí: http://en.wikipedia.org/wiki/URI_scheme . No es necesario extraer ninguna parte, solo prueba si un URI es válido.

(el formato preferido es .Net RegularExpression) (.Net versión 1.1)

  • No es necesario verificar un protocolo conocido, solo uno válido.

Solución actual:

^([a-zA-Z0-9+.-]+):(//([a-zA-Z0-9-._~!$&''()*+,;=:]*)@)?([a-zA-Z0-9-._~!$&''()*+,;=]+)(:(//d*))?(/?[a-zA-Z0-9-._~!$&''()*+,;=:/]+)?(//?[a-zA-Z0-9-._~!$&''()*+,;=:/?@]+)?(#[a-zA-Z0-9-._~!$&''()*+,;=:/?@]+)?$(:(//d*))?(/?[a-zA-Z0-9-._~!$&''()*+,;=:/]+)?(/?[a-zA-Z0-9-._~!$&''()*+,;=:/?@]+)?(/#[a-zA-Z0-9-._~!$&''()*+,;=:/?@]+)?$



¿Hay algún URI específico que le interese o está tratando de encontrar una sola expresión regular que valide STD66 ?

Iba a señalarte esta expresión regular para analizar un URI. En teoría, podría verificar si todos los elementos que le interesan están ahí.

Pero creo que la respuesta de bdukes es mejor.


Este sitio parece prometedor: http://snipplr.com/view/6889/regular-expressions-for-uri-validationparsing/

Proponen seguir a regex:

/^([a-z0-9+.-]+):(?://(?:((?:[a-z0-9-._~!$&''()*+,;=:]|%[0-9A-F]{2})*)@)?((?:[a-z0-9-._~!$&''()*+,;=]|%[0-9A-F]{2})*)(?::(/d*))?(/(?:[a-z0-9-._~!$&''()*+,;=:@/]|%[0-9A-F]{2})*)?|(/?(?:[a-z0-9-._~!$&''()*+,;=:@]|%[0-9A-F]{2})+(?:[a-z0-9-._~!$&''()*+,;=:@/]|%[0-9A-F]{2})*)?)(?:/?((?:[a-z0-9-._~!$&''()*+,;=:/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&''()*+,;=:/?@]|%[0-9A-F]{2})*))?$/i


La especificación de URI dice :

La siguiente línea es la expresión regular para desglosar una referencia de URI bien formada en sus componentes.

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(/?([^#]*))?(#(.*))?

(Supongo que es la misma expresión regular que en el enlace STD66 dado en otra respuesta).

Pero la ruptura no es valida . Para validar correctamente un URI, uno tendría que traducir el BNF para URI a una expresión regular. Si bien algunos BNF no se pueden expresar como expresiones regulares, creo que con este se podría hacer. Pero no debería hacerse, sería un gran desastre. Es mejor usar una función de biblioteca.


La mejor expresión regular que se me ocurrió de acuerdo con RFC 3986 ( https://tools.ietf.org/html/rfc3986 ) fue la siguiente:

// named groups /^(?<scheme>[a-z][a-z0-9+.-]+):(?<authority>////(?<user>[^@]+@)?(?<host>[a-z0-9./-_~]+)(?<port>:/d+)?)?(?<path>(?:[a-z0-9-._~]|%[a-f0-9]|[!$&''()*+,;=:@])+(?://(?:[a-z0-9-._~]|%[a-f0-9]|[!$&''()*+,;=:@])*)*|(?://(?:[a-z0-9-._~]|%[a-f0-9]|[!$&''()*+,;=:@])+)*)?(?<query>/?(?:[a-z0-9-._~]|%[a-f0-9]|[!$&''()*+,;=:@]|[/?])+)?(?<fragment>/#(?:[a-z0-9-._~]|%[a-f0-9]|[!$&''()*+,;=:@]|[/?])+)?$/i // unnamed groups /^([a-z][a-z0-9+.-]+):(////([^@]+@)?([a-z0-9./-_~]+)(:/d+)?)?((?:[a-z0-9-._~]|%[a-f0-9]|[!$&''()*+,;=:@])+(?://(?:[a-z0-9-._~]|%[a-f0-9]|[!$&''()*+,;=:@])*)*|(?://(?:[a-z0-9-._~]|%[a-f0-9]|[!$&''()*+,;=:@])+)*)?(/?(?:[a-z0-9-._~]|%[a-f0-9]|[!$&''()*+,;=:@]|[/?])+)?(/#(?:[a-z0-9-._~]|%[a-f0-9]|[!$&''()*+,;=:@]|[/?])+)?$/i

capturar grupos

  1. esquema
  2. autoridad
  3. Información de usuario
  4. anfitrión
  5. Puerto
  6. camino
  7. consulta
  8. fragmento

La mejor y más definitiva guía que he encontrado está aquí: http://jmrware.com/articles/2009/uri_regexp/URI_regex.html (En respuesta a su pregunta, consulte la entrada de la tabla URI )

Todas estas reglas de RFC3986 se reproducen en la Tabla 2 junto con una implementación de expresión regular para cada regla.

Una implementación de JavaScript de esto está disponible aquí: https://github.com/jhermsmeier/uri.regex

Como referencia, la expresión regular de URI se repite a continuación:

# RFC-3986 URI component: URI [A-Za-z][A-Za-z0-9+/-.]* : # scheme ":" (?: // # hier-part (?: (?:[A-Za-z0-9/-._~!$&''()*+,;=:]|%[0-9A-Fa-f]{2})* @)? (?: /[ (?: (?: (?: (?:[0-9A-Fa-f]{1,4}:) {6} | :: (?:[0-9A-Fa-f]{1,4}:) {5} | (?: [0-9A-Fa-f]{1,4})? :: (?:[0-9A-Fa-f]{1,4}:) {4} | (?: (?:[0-9A-Fa-f]{1,4}:){0,1} [0-9A-Fa-f]{1,4})? :: (?:[0-9A-Fa-f]{1,4}:) {3} | (?: (?:[0-9A-Fa-f]{1,4}:){0,2} [0-9A-Fa-f]{1,4})? :: (?:[0-9A-Fa-f]{1,4}:) {2} | (?: (?:[0-9A-Fa-f]{1,4}:){0,3} [0-9A-Fa-f]{1,4})? :: [0-9A-Fa-f]{1,4}: | (?: (?:[0-9A-Fa-f]{1,4}:){0,4} [0-9A-Fa-f]{1,4})? :: ) (?: [0-9A-Fa-f]{1,4} : [0-9A-Fa-f]{1,4} | (?: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) /.){3} (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) ) | (?: (?:[0-9A-Fa-f]{1,4}:){0,5} [0-9A-Fa-f]{1,4})? :: [0-9A-Fa-f]{1,4} | (?: (?:[0-9A-Fa-f]{1,4}:){0,6} [0-9A-Fa-f]{1,4})? :: ) | [Vv][0-9A-Fa-f]+/.[A-Za-z0-9/-._~!$&''()*+,;=:]+ ) /] | (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/.){3} (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) | (?:[A-Za-z0-9/-._~!$&''()*+,;=]|%[0-9A-Fa-f]{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})+ (?:/ (?:[A-Za-z0-9/-._~!$&''()*+,;=:@]|%[0-9A-Fa-f]{2})* )* | ) (?:/? (?:[A-Za-z0-9/-._~!$&''()*+,;=:@/?]|%[0-9A-Fa-f]{2})* )? # [ "?" query ] (?:/# (?:[A-Za-z0-9/-._~!$&''()*+,;=:@/?]|%[0-9A-Fa-f]{2})* )? # [ "#" fragment ]