Advertisement
manman89

JAVASCRIPT - isURL BY INTERNATIONAL STANDARDS

Dec 7th, 2012
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function isIRI(url,mode){
  2.     // CHECK URL AND MODE IS UNDEFINED WILL RETURN FALSE
  3.     if(typeof(url)==="undefined" || typeof(mode)==="undefined"){return false;}
  4.    
  5.     // CHECK URL AND MODE IS NULL WILL RETURN FALSE
  6.     if(url==null || mode==null){return false;}
  7.    
  8.     //TRIM URL AND MODE
  9.     url = url.toString().replace(/^\s\s*/,'').replace(/\s\s*$/,'');
  10.     mode = mode.toString().replace(/^\s\s*/,'').replace(/\s\s*$/,'');
  11.    
  12.     // CHECK URL AND MODE IS EMPTY WILL RETURN FALSE
  13.     if(url=="" || mode==""){return false;}
  14.    
  15.     //  INTERNATIONAL STANDARDS FOR URL
  16.    
  17.     //  IRIS
  18.     //  RFC 3987 : INTERNATIONALIZED RESOURCE IDENTIFIERS (IRIS)
  19.     //  http://www.ietf.org/rfc/rfc3987
  20.  
  21.     //  RFC 2234 : AUGMENTED BNF FOR SYNTAX SPECIFICATIONS: ABNF
  22.     //  http://www.ietf.org/rfc/rfc2234
  23.  
  24.     var ALPHA="[a-z]";
  25.     var HEXDIG="[\\da-f]";
  26.     var IPv6address="";
  27.  
  28.     var DIGIT="\\d";
  29.     var genDelims="[:\\/\\?#\\[\\]@]";
  30.     var subDelims="[!\\$&'\\(\\)\\*\\+,;=]";
  31.     var reserved="("+genDelims+"|"+subDelims+")";
  32.     var unreserved="("+ALPHA+"|"+DIGIT+"|-"+"|\\."+"|_"+"|~"+")";
  33.     var pctEncoded="("+"%"+HEXDIG+"{2}"+")";
  34.     var decOctet="("+DIGIT+"|[1-9]"+DIGIT+"|1"+DIGIT+DIGIT+"|2"+"[0-4]"+DIGIT+"|25"+"[0-5]"+")";
  35.     var IPv4address="("+decOctet+"\\."+decOctet+"\\."+decOctet+"\\."+decOctet+")";
  36.     var h16=HEXDIG+"{1,4}";
  37.     var ls32="("+"("+h16+":"+h16+")"+"|"+IPv4address+")";
  38.     var IPvFuture="("+"v"+HEXDIG+"{1,}"+"\\."+"("+unreserved+"|"+subDelims+"|:"+")+"+")";
  39.     var IPLiteral="("+"\\["+"("+IPv6address+"|"+IPvFuture+")"+"\\]"+")";
  40.     var port=DIGIT+"*";
  41.     var scheme="("+ALPHA+"("+ALPHA+"|"+DIGIT+"|\\+"+"|-"+"|\\."+")*"+")";
  42.     var iprivate="["+"\\uE000-\\uF8FF"+"]";
  43.     var ucschar="["+"\\u00A0-\\uD7FF"+"\\uF900-\\uFDCF"+"\\uFDF0-\\uFFEF"+"]";
  44.     var iunreserved="("+ALPHA+"|"+DIGIT+"|-"+"|\\."+"|_"+"|~"+"|"+ucschar+")";
  45.     var ipchar="("+iunreserved+"|"+pctEncoded+"|"+subDelims+"|:"+"|@"+")";
  46.     var ifragment="("+ipchar+"|\\/"+"|\\?"+")*";
  47.     var iquery="("+ipchar+"|"+iprivate+"|\\/"+"|\\?"+")*";
  48.     var isegment=ipchar+"*";
  49.     var isegmentNz=ipchar+"+";
  50.     var isegmentNzNc="("+iunreserved+"|"+pctEncoded+"|"+subDelims+"|@"+")+";
  51.     var ipathAbempty="("+"\\/"+isegment+")*";
  52.     var ipathAbsolute="("+"\\/"+"("+isegmentNz+"("+"\\/"+isegment+")*"+")?"+")";
  53.     var ipathNoscheme="("+isegmentNzNc+"("+"\\/"+isegment+")*"+")";
  54.     var ipathRootless="("+isegmentNz+"("+"\\/"+isegment+")*"+")";
  55.     var ipathEmpty="("+ipchar+"){0}";
  56.     var ipath="("+ipathAbempty+"|"+ipathAbsolute+"|"+ipathNoscheme+"|"+ipathRootless+"|"+ipathEmpty+")";
  57.     var iregName="("+iunreserved+"|"+pctEncoded+"|"+subDelims+")*";
  58.     var ihost="("+IPLiteral+"|"+IPv4address+"|"+iregName+")";
  59.     var iuserinfo="("+iunreserved+"|"+pctEncoded+"|"+subDelims+"|:"+")*";
  60.     var iauthority="("+"("+iuserinfo+"@)?"+ihost+"(:"+port+")?"+")";
  61.     var irelativePart="("+"\\/\\/"+iauthority+ipathAbempty+"|"+ipathAbsolute+"|"+ipathNoscheme+"|"+ipathEmpty+")";
  62.     var irelativeRef="("+irelativePart+"(\\?"+iquery+")?"+"(\\#"+ifragment+")?"+")";
  63.     var ihierPart="("+"\\/\\/"+iauthority+ipathAbempty+"|"+ipathAbsolute+"|"+ipathRootless+"|"+ipathEmpty+")";
  64.     var absoluteIRI="("+scheme+":"+ihierPart+"("+iquery+")?"+")";
  65.     var IRI=scheme+":"+ihierPart+"(\\?"+iquery+")?"+"(\\#"+ifragment+")?";
  66.     var IRIReference="("+IRI+"|"+irelativeRef+")";
  67.  
  68.     //  INTERNATIONALIZED URLS FOR THE HTTP SCHEME
  69.    
  70.     //  RFC 2616 : HYPERTEXT TRANSFER PROTOCOL -- HTTP/1.1
  71.     //  http://www.ietf.org/rfc/rfc2616
  72.  
  73.     //  RFC 3986 : UNIFORM RESOURCE IDENTIFIER (URI): GENERIC SYNTAX
  74.     //  http://www.ietf.org/rfc/rfc3986
  75.  
  76.     //  RFC 2396 : UNIFORM RESOURCE IDENTIFIERS (URI): GENERIC SYNTAX (OBSELETED BY RFC 3986)
  77.     //  http://www.ietf.org/rfc/rfc2396
  78.  
  79.     var ialpha="("+ALPHA+"|"+ucschar+")";
  80.     var ialphaNum="("+ALPHA+"|"+DIGIT+"|"+ucschar+")";
  81.     var idomainLabel="("+ialphaNum+"|("+ialphaNum+iunreserved+"*"+ialphaNum+")"+")";
  82.  
  83.     // USES UNRESERVED CHARACTERS FROM [RFC 3987] IRI
  84.     var itopLabel="("+ialpha+"|("+ialpha+iunreserved+"*"+ialpha+")"+")";
  85.     var ihostName="("+idomainLabel+"\\."+")*"+itopLabel+"\\.?";
  86.    
  87.     switch(mode){
  88.         case "IRI": break;
  89.         case "IRI,HTTP,HTTPS":
  90.             scheme="(https?)";
  91.             ihost="("+IPLiteral+"|"+IPv4address+"|"+ihostName+")";  // [RFC 2396] URI GENERIC SYNTAX -> MODIFIED TO ALLOW IPLITERAL
  92.             iauthority="("+"("+iuserinfo+"@)?"+ihost+"(:"+port+")?"+")";    // [RFC 3987] IRI
  93.             IRI=scheme+":\\/\\/"+iauthority+ipathAbsolute+"?"+"(\\?"+iquery+")?"+"(\\#"+ifragment+")?";
  94.             break;
  95.         case "IRI,HTTP,HTTPS,FTP":
  96.             // INTERNATIONALIZED URLS FOR THE HTTP(S) AND FTP SCHEMES
  97.             scheme="(https?|ftp)";
  98.             ihost="("+IPv4address+"|"+ihostName+")";    // [RFC 2396] URI GENERIC SYNTAX
  99.             iauthority="("+"("+iuserinfo+"@)?"+ihost+"(:"+port+")?"+")";    // [RFC 3987] IRI
  100.             IRI=scheme+":\\/\\/"+iauthority+ipathAbsolute+"?"+"(\\?"+iquery+")?"+"(\\#"+ifragment+")?";
  101.             break;
  102.     }
  103.     return RegExp("^"+IRI+"$", "i").test(url);
  104. }
  105. function Checker(){
  106.     var url = prompt("ENTER URL");
  107.     var mode = prompt("ENTER MODE\r\n1: IRI\r\n2: IRI,HTTP,HTTPS\r\n3: IRI,HTTP,HTTPS,FTP");
  108.     switch(mode){
  109.         case "1": mode = "IRI"; break;
  110.         case "2": mode = "IRI,HTTP,HTTPS"; break;
  111.         case "3": mode = "IRI,HTTP,HTTPS,FTP"; break;
  112.     }
  113.     alert(isIRI(url,mode));
  114.     Checker();
  115. }
  116. Checker();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement