首先抱歉第10,000次RegEx问题,
我意识到还有其他与域相关的问题,但正则表达式要么不正常,要么太复杂,要么对于具有子域,协议和文件路径的URL.
我更简单,我需要验证一个域名:
google.com
stackoverflow.com
所以这是一个最新形式的域名 - 甚至不是像www这样的子域名.
编辑:TLD显然是2-6个字符
没有.4修订版: TLD实际上应该被标记为"子域名",因为它应该包含像.co.uk这样的东西 - 我想可能的唯一验证(除了检查列表之外)将是'在第一个点之后应该有一个或者规则#1下的更多角色
非常感谢,相信我,我确实尝试过!
我正在使用PHP中的电子邮件验证正则表达式,我需要知道TLD可能存在多长时间并且仍然有效.我做了一些搜索,但找不到有关该主题的更多信息.那么TLD可能需要多长时间?
如何从URL字符串中获取域名?
+----------------------+------------+
| input | output |
+----------------------+------------+
| www.google.com | google |
| www.mail.yahoo.com | mail.yahoo |
| www.mail.yahoo.co.in | mail.yahoo |
| www.abc.au.uk | abc |
+----------------------+------------+
Run Code Online (Sandbox Code Playgroud)
有关:
是否可以不使用正则表达式?
例如,我想检查一个字符串是否是一个有效的域:
domain-name
abcd
example
Run Code Online (Sandbox Code Playgroud)
是有效的域名.这些当然是无效的:
domaia@name
ab$%cd
Run Code Online (Sandbox Code Playgroud)
等等.所以基本上它应该以字母数字字符开头,然后可能会有更多的alnum字符加上连字符.它也必须以alnum角色结束.
如果不可能,你能建议我采用正则表达式吗?
编辑:
为什么这不起作用?我错误地使用了preg_match吗?
$domain = '@djkal';
$regexp = '/^[a-zA-Z0-9][a-zA-Z0-9\-\_]+[a-zA-Z0-9]$/';
if (false === preg_match($regexp, $domain)) {
throw new Exception('Domain invalid');
}
Run Code Online (Sandbox Code Playgroud) 所以,我一直在研究这个域名正则表达式.到目前为止,它似乎通过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]))?$/)
Run Code Online (Sandbox Code Playgroud)