Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function isIRI(url,mode){
- // CHECK URL AND MODE IS UNDEFINED WILL RETURN FALSE
- if(typeof(url)==="undefined" || typeof(mode)==="undefined"){return false;}
- // CHECK URL AND MODE IS NULL WILL RETURN FALSE
- if(url==null || mode==null){return false;}
- //TRIM URL AND MODE
- url = url.toString().replace(/^\s\s*/,'').replace(/\s\s*$/,'');
- mode = mode.toString().replace(/^\s\s*/,'').replace(/\s\s*$/,'');
- // CHECK URL AND MODE IS EMPTY WILL RETURN FALSE
- if(url=="" || mode==""){return false;}
- // INTERNATIONAL STANDARDS FOR URL
- // IRIS
- // RFC 3987 : INTERNATIONALIZED RESOURCE IDENTIFIERS (IRIS)
- // http://www.ietf.org/rfc/rfc3987
- // RFC 2234 : AUGMENTED BNF FOR SYNTAX SPECIFICATIONS: ABNF
- // http://www.ietf.org/rfc/rfc2234
- var ALPHA="[a-z]";
- var HEXDIG="[\\da-f]";
- var IPv6address="";
- var DIGIT="\\d";
- var genDelims="[:\\/\\?#\\[\\]@]";
- var subDelims="[!\\$&'\\(\\)\\*\\+,;=]";
- var reserved="("+genDelims+"|"+subDelims+")";
- var unreserved="("+ALPHA+"|"+DIGIT+"|-"+"|\\."+"|_"+"|~"+")";
- var pctEncoded="("+"%"+HEXDIG+"{2}"+")";
- var decOctet="("+DIGIT+"|[1-9]"+DIGIT+"|1"+DIGIT+DIGIT+"|2"+"[0-4]"+DIGIT+"|25"+"[0-5]"+")";
- var IPv4address="("+decOctet+"\\."+decOctet+"\\."+decOctet+"\\."+decOctet+")";
- var h16=HEXDIG+"{1,4}";
- var ls32="("+"("+h16+":"+h16+")"+"|"+IPv4address+")";
- var IPvFuture="("+"v"+HEXDIG+"{1,}"+"\\."+"("+unreserved+"|"+subDelims+"|:"+")+"+")";
- var IPLiteral="("+"\\["+"("+IPv6address+"|"+IPvFuture+")"+"\\]"+")";
- var port=DIGIT+"*";
- var scheme="("+ALPHA+"("+ALPHA+"|"+DIGIT+"|\\+"+"|-"+"|\\."+")*"+")";
- var iprivate="["+"\\uE000-\\uF8FF"+"]";
- var ucschar="["+"\\u00A0-\\uD7FF"+"\\uF900-\\uFDCF"+"\\uFDF0-\\uFFEF"+"]";
- var iunreserved="("+ALPHA+"|"+DIGIT+"|-"+"|\\."+"|_"+"|~"+"|"+ucschar+")";
- var ipchar="("+iunreserved+"|"+pctEncoded+"|"+subDelims+"|:"+"|@"+")";
- var ifragment="("+ipchar+"|\\/"+"|\\?"+")*";
- var iquery="("+ipchar+"|"+iprivate+"|\\/"+"|\\?"+")*";
- var isegment=ipchar+"*";
- var isegmentNz=ipchar+"+";
- var isegmentNzNc="("+iunreserved+"|"+pctEncoded+"|"+subDelims+"|@"+")+";
- var ipathAbempty="("+"\\/"+isegment+")*";
- var ipathAbsolute="("+"\\/"+"("+isegmentNz+"("+"\\/"+isegment+")*"+")?"+")";
- var ipathNoscheme="("+isegmentNzNc+"("+"\\/"+isegment+")*"+")";
- var ipathRootless="("+isegmentNz+"("+"\\/"+isegment+")*"+")";
- var ipathEmpty="("+ipchar+"){0}";
- var ipath="("+ipathAbempty+"|"+ipathAbsolute+"|"+ipathNoscheme+"|"+ipathRootless+"|"+ipathEmpty+")";
- var iregName="("+iunreserved+"|"+pctEncoded+"|"+subDelims+")*";
- var ihost="("+IPLiteral+"|"+IPv4address+"|"+iregName+")";
- var iuserinfo="("+iunreserved+"|"+pctEncoded+"|"+subDelims+"|:"+")*";
- var iauthority="("+"("+iuserinfo+"@)?"+ihost+"(:"+port+")?"+")";
- var irelativePart="("+"\\/\\/"+iauthority+ipathAbempty+"|"+ipathAbsolute+"|"+ipathNoscheme+"|"+ipathEmpty+")";
- var irelativeRef="("+irelativePart+"(\\?"+iquery+")?"+"(\\#"+ifragment+")?"+")";
- var ihierPart="("+"\\/\\/"+iauthority+ipathAbempty+"|"+ipathAbsolute+"|"+ipathRootless+"|"+ipathEmpty+")";
- var absoluteIRI="("+scheme+":"+ihierPart+"("+iquery+")?"+")";
- var IRI=scheme+":"+ihierPart+"(\\?"+iquery+")?"+"(\\#"+ifragment+")?";
- var IRIReference="("+IRI+"|"+irelativeRef+")";
- // INTERNATIONALIZED URLS FOR THE HTTP SCHEME
- // RFC 2616 : HYPERTEXT TRANSFER PROTOCOL -- HTTP/1.1
- // http://www.ietf.org/rfc/rfc2616
- // RFC 3986 : UNIFORM RESOURCE IDENTIFIER (URI): GENERIC SYNTAX
- // http://www.ietf.org/rfc/rfc3986
- // RFC 2396 : UNIFORM RESOURCE IDENTIFIERS (URI): GENERIC SYNTAX (OBSELETED BY RFC 3986)
- // http://www.ietf.org/rfc/rfc2396
- var ialpha="("+ALPHA+"|"+ucschar+")";
- var ialphaNum="("+ALPHA+"|"+DIGIT+"|"+ucschar+")";
- var idomainLabel="("+ialphaNum+"|("+ialphaNum+iunreserved+"*"+ialphaNum+")"+")";
- // USES UNRESERVED CHARACTERS FROM [RFC 3987] IRI
- var itopLabel="("+ialpha+"|("+ialpha+iunreserved+"*"+ialpha+")"+")";
- var ihostName="("+idomainLabel+"\\."+")*"+itopLabel+"\\.?";
- switch(mode){
- case "IRI": break;
- case "IRI,HTTP,HTTPS":
- scheme="(https?)";
- ihost="("+IPLiteral+"|"+IPv4address+"|"+ihostName+")"; // [RFC 2396] URI GENERIC SYNTAX -> MODIFIED TO ALLOW IPLITERAL
- iauthority="("+"("+iuserinfo+"@)?"+ihost+"(:"+port+")?"+")"; // [RFC 3987] IRI
- IRI=scheme+":\\/\\/"+iauthority+ipathAbsolute+"?"+"(\\?"+iquery+")?"+"(\\#"+ifragment+")?";
- break;
- case "IRI,HTTP,HTTPS,FTP":
- // INTERNATIONALIZED URLS FOR THE HTTP(S) AND FTP SCHEMES
- scheme="(https?|ftp)";
- ihost="("+IPv4address+"|"+ihostName+")"; // [RFC 2396] URI GENERIC SYNTAX
- iauthority="("+"("+iuserinfo+"@)?"+ihost+"(:"+port+")?"+")"; // [RFC 3987] IRI
- IRI=scheme+":\\/\\/"+iauthority+ipathAbsolute+"?"+"(\\?"+iquery+")?"+"(\\#"+ifragment+")?";
- break;
- }
- return RegExp("^"+IRI+"$", "i").test(url);
- }
- function Checker(){
- var url = prompt("ENTER URL");
- var mode = prompt("ENTER MODE\r\n1: IRI\r\n2: IRI,HTTP,HTTPS\r\n3: IRI,HTTP,HTTPS,FTP");
- switch(mode){
- case "1": mode = "IRI"; break;
- case "2": mode = "IRI,HTTP,HTTPS"; break;
- case "3": mode = "IRI,HTTP,HTTPS,FTP"; break;
- }
- alert(isIRI(url,mode));
- Checker();
- }
- Checker();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement