Skip to content

Instantly share code, notes, and snippets.

@teramako
Created March 21, 2011 16:40
Show Gist options
  • Save teramako/879748 to your computer and use it in GitHub Desktop.
Save teramako/879748 to your computer and use it in GitHub Desktop.
URIにきちんとTLDが付いているか検証する
/**
* @example
* validateHost("http://hogehoge"); // false
*/
var io = window.Services.io,
eTLD = window.Services.eTLD,
fixup = Cc["@mozilla.org/docshell/urifixup;1"].getService(Ci.nsIURIFixup);
function makeURI (aURL, aCharset, aBaseURI) {
try {
return io.newURI(aURL, aCharset, aBaseURI);
} catch(e) {
return fixup.createFixupURI(aURL, fixup.FIXUP_FLAG_NONE);
}
}
function validateHost (aURI) {
if (!(aURI instanceof Ci.nsIURI))
aURI = makeURI(aURI);
var suffix = eTLD.getPublicSuffixFromHost(aURI.host);
// co.jp など "." が含まれていたらドメイン名だとみなす
if (suffix.indexOf(".") > 0)
return true;
switch (suffix) {
// gTLD
case "aero":
case "arpa":
case "asia":
case "biz":
case "cat":
case "com":
case "coop":
case "edu":
case "gov":
case "info":
case "int":
case "jobs":
case "mil":
case "mobi":
case "museum":
case "name":
case "net":
case "org":
case "pro":
case "tel":
case "travel":
// ccTLD
case "ac":
case "ad":
case "ae":
case "af":
case "ag":
case "ai":
case "al":
case "am":
case "an":
case "ao":
case "aq":
case "ar":
case "as":
case "at":
case "au":
case "aw":
case "ax":
case "az":
case "ba":
case "bb":
case "bd":
case "be":
case "bf":
case "bg":
case "bh":
case "bi":
case "bj":
case "bm":
case "bn":
case "bo":
case "br":
case "bs":
case "bt":
case "bv":
case "bw":
case "by":
case "bz":
case "ca":
case "cc":
case "cd":
case "cf":
case "cg":
case "ch":
case "ci":
case "ck":
case "cl":
case "cm":
case "cn":
case "co":
case "cr":
case "cs":
case "cu":
case "cv":
case "cx":
case "cy":
case "cz":
case "dd":
case "de":
case "dj":
case "dk":
case "dm":
case "do":
case "dz":
case "ec":
case "ee":
case "eg":
case "eh":
case "er":
case "es":
case "et":
case "eu":
case "fi":
case "fj":
case "fk":
case "fm":
case "fo":
case "fr":
case "ga":
case "gb":
case "gd":
case "ge":
case "gf":
case "gg":
case "gh":
case "gi":
case "gl":
case "gm":
case "gn":
case "gp":
case "gq":
case "gr":
case "gs":
case "gt":
case "gu":
case "gw":
case "gy":
case "hk":
case "hm":
case "hn":
case "hr":
case "ht":
case "hu":
case "id":
case "ie":
case "il":
case "im":
case "in":
case "io":
case "iq":
case "ir":
case "is":
case "it":
case "je":
case "jm":
case "jo":
case "jp":
case "ke":
case "kg":
case "kh":
case "ki":
case "km":
case "kn":
case "kp":
case "kr":
case "kw":
case "ky":
case "kz":
case "la":
case "lb":
case "lc":
case "li":
case "lk":
case "lr":
case "ls":
case "lt":
case "lu":
case "lv":
case "ly":
case "ma":
case "mc":
case "md":
case "me":
case "mg":
case "mh":
case "mk":
case "ml":
case "mm":
case "mn":
case "mo":
case "mp":
case "mq":
case "mr":
case "ms":
case "mt":
case "mu":
case "mv":
case "mw":
case "mx":
case "my":
case "mz":
case "na":
case "nc":
case "ne":
case "nf":
case "ng":
case "ni":
case "nl":
case "no":
case "np":
case "nr":
case "nu":
case "nz":
case "om":
case "pa":
case "pe":
case "pf":
case "pg":
case "ph":
case "pk":
case "pl":
case "pm":
case "pn":
case "pr":
case "ps":
case "pt":
case "pw":
case "py":
case "qa":
case "re":
case "ro":
case "rs":
case "ru":
case "rw":
case "sa":
case "sb":
case "sc":
case "sd":
case "se":
case "sg":
case "sh":
case "si":
case "sj":
case "sk":
case "sl":
case "sm":
case "sn":
case "so":
case "sr":
case "st":
case "su":
case "sv":
case "sy":
case "sz":
case "tc":
case "td":
case "tf":
case "tg":
case "th":
case "tj":
case "tk":
case "tl":
case "tm":
case "tn":
case "to":
case "tp":
case "tr":
case "tt":
case "tv":
case "tw":
case "tz":
case "ua":
case "ug":
case "uk":
case "um":
case "us":
case "uy":
case "uz":
case "va":
case "vc":
case "ve":
case "vg":
case "vi":
case "vn":
case "vu":
case "wf":
case "ws":
case "ye":
case "yt":
case "yu":
case "za":
case "zm":
case "zr":
case "zw":
return true;
default:
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment