但如果你真的想通过正则表达式验证
\n\n<?php\n\n$domain = \'\xcf\x80\xce\xb1\xcf\x81\xce\xac\xce\xb4\xce\xb5\xce\xb9\xce\xb3\xce\xbc\xce\xb1.gr\';\n$regex = \'#^([\\w-]+://?|www[\\.])?([^\\-\\s\\,\\;\\:\\+\\/\\\\\\?\\^\\`\\=\\&\\%\\"\\\'\\*\\#\\<\\>]*)\\.[a-z]{2,7}$#\';\nif (preg_match($regex, $domain)) {\n echo "VALID";\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但这会让您出现误报,因为验证 idn 域确实很复杂,我试图验证其中不存在无效字符,但列表并不完整。
\n\n最好将之前转换为双关语代码
\n\n$regex = \'#^([\\w-]+://?|www[\\.])?[a-z0-9]+[a-z0-9\\-\\.]*[a-z0-9]+\\.[a-z]{2,7}$#\';\nif (preg_match($regex, idn_to_ascii($domain))) {\n echo "VALID";\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果您还想测试域名是否可以解析,请尝试:
\n\n$regex = \'#^([\\w-]+://?|www[\\.])?[a-z0-9]+[a-z0-9\\-\\.]*[a-z0-9]+\\.[a-z]{2,7}$#\';\n$punny_domain = idn_to_ascii($domain);\nif (preg_match($regex, $punny_domain)) {\n if (gethostbyname($punny_domain) != $punny_domain) {\n echo "VALID";\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n