URI Parser
The following is a URI Parser ported by Mike Cann from js. It takes a URI string and returns an object with public member variables corresponding to the relevant parts of the URI.
There is also a customised toString() function to neatly display the object.
Usage
example
trace(new URLParser("http://www.mikecann.co.uk/programming/haxe/haxe-jqueryextern-gotcha?somevar=1242#home"));
output
For Url -> http://www.mikecann.co.uk/programming/haxe/haxe-jqueryextern-gotcha?somevar=1242#home source: http://www.mikecann.co.uk/programming/haxe/haxe-jqueryextern-gotcha?somevar=1242#home protocol: http authority: www.mikecann.co.uk userInfo: undefined user: undefined password: undefined host: www.mikecann.co.uk port: undefined relative: /programming/haxe/haxe-jqueryextern-gotcha?somevar=1242#home path: /programming/haxe/haxe-jqueryextern-gotcha directory: /programming/haxe/haxe-jqueryextern-gotcha file: query: somevar=1242 anchor: home
Code
package utils; import haxe.Http; class URLParser { // Publics public var url : String; public var source : String; public var protocol : String; public var authority : String; public var userInfo : String; public var user : String; public var password : String; public var host : String; public var port : String; public var relative : String; public var path : String; public var directory : String; public var file : String; public var query : String; public var anchor : String; // Privates inline static private var _parts : Array<String> = ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"]; public function new(url:String) { // Save for 'ron this.url = url; // The almighty regexp (courtesy of http://blog.stevenlevithan.com/archives/parseuri) var r : EReg = ~/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; // Match the regexp to the url r.match(url); // Use reflection to set each part for (i in 0..._parts.length) { Reflect.setField(this, _parts[i], r.matched(i)); } } public function toString() : String { var s : String = "For Url -> " + url + "\n"; for (i in 0..._parts.length) { s += _parts[i] + ": " + Reflect.field(this, _parts[i]) + (i==_parts.length-1?"":"\n"); } return s; } public static function parse(url:String) : URLParser { return new URLParser(url); } }
version #10440, modified 2011-04-12 06:19:24 by othrayte