这些年来,我在javascript以及php中使用此regEx来检查有效的域名。
原始版
/^((http|https):\/{2})([w]{3})([\.]{1})([a-zA-Z0-9-]{2,63})([\.]{1})((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|co.in|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])$/i
更改了损坏的版本
我添加了最后一部分,以便它可以接受并验证.com之后的内容。但是我发现它以某种方式打破了整个事情并且任何事情都进入了。我如何才能正确理解这一点?
/^((http|https):\/{2})([w]{3})([\.]{1})([a-zA-Z0-9-]{2,63})([\.]{1})((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|co.in|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])([-A-Za-z0-9+&@#\/%=~_|:.]{0,51})$/i
RegEx工作正常。这只是我添加的最后一部分似乎导致问题([-A-Za-z0-9+&@#\/%=~_|:.]{0,51})
我在这里要做的是验证.com之后的部分。例如,此问题的.com之后的部分是questions/20217720/regex-to-check-for-validity-of-whats-after-the-com
。这是我试图验证的部分。但是现在tlds没有验证。
实施例: http://www.example.com应验证为真
http://www.example.com/也应验证为真
http://www.example.com/mail应验证为真
http://www.example.comxx应验证为false
http://www.example.comxx/mail应验证为false
答案 0 :(得分:1)
这适合您的需求:
(\/[-A-Za-z0-9+&@#\/%=~_|:.]{0,50})?
整个群组是可选的,但如果在TLD之后出现任何内容,那么它需要/
作为第一个角色(减少51到50来补偿)。
完整的正则表达式:
/^((http|https):\/{2})([w]{3})([\.]{1})([a-zA-Z0-9-]{2,63})([\.]{1})((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|co.in|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])(\/[-A-Za-z0-9+&@#\/%=~_|:.]{0,50})?$/i
答案 1 :(得分:0)
对于PHP,您可以使用parse_url
(documentation)作为替代方案。
<?php
$info = parse_url($url);
// is .com domain
if(end(explode('.', $info['host'])) == "com"){
$behinddotcom = $info['path'] . '?' . $info['query'];
}
?>
答案 2 :(得分:0)
TLD之后是路径/文件名。除非您有任何特殊情况或规则要遵守,否则无需验证。
如果您只是需要提取它,这是一件简单的事情。在例如你会做的JavaScript
window.location.pathname // returns "/questions/20217720/regex-to-check-for-validity-of-whats-after-the-com"