所以,我一直在研究这个域名正则表达式.到目前为止,它似乎通过SLD和TLD(使用可选的ccTLD)获取域名,但是TLD列表存在重复.这可以进一步重构吗?
params[:domain_name].downcase.strip.match(/^[a-z0-9\-]{2,63} \.((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)| (c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]| (g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)| (j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]| (m[acdghklmnopqrstuvwxyz]|me|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)| (p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]| (t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]) (\.((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)| (c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]| (g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)| (j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]| m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)| (n[acefgilopruz]|name|net)|(om|org)| (p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]| (t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]))?$/)
Alnitak.. 28
请不要使用像这样固定且非常复杂的正则表达式来匹配已知的域名.
TLD列表并非一成不变,特别是ICANN正在考虑新gTLD的简化流程.甚至ccTLD列表有时也会发生变化!
查看http://publicsuffix.org/上提供的列表,并编写一些能够下载和解析该列表的代码.
请不要使用像这样固定且非常复杂的正则表达式来匹配已知的域名.
TLD列表并非一成不变,特别是ICANN正在考虑新gTLD的简化流程.甚至ccTLD列表有时也会发生变化!
查看http://publicsuffix.org/上提供的列表,并编写一些能够下载和解析该列表的代码.