Php 改进regex模式以同时验证ipv6/punycode/foreign域名
可能重复:Php 改进regex模式以同时验证ipv6/punycode/foreign域名,php,regex,ipv6,punycode,Php,Regex,Ipv6,Punycode,可能重复: 我目前使用此正则表达式模式在将域名添加到我的数据库之前验证域名: $pattern = '/^https?:\/\/([a-zA-Z0-9_\-]+:[^\s@:]+@)?((([a-zA-Z][a-zA-Z0-9\-]+\.)+[a-zA-Z\-]+)|((2(5[0-5]|[0-4][0-9])|[01][0-9]{2}|[0-9]{1,2})\.(2(5[0-5]|[0-4][0-9])|[01][0-9]{2}|[0-9]{1,2})\.(2(5[0-5]|[0-4][0
我目前使用此正则表达式模式在将域名添加到我的数据库之前验证域名:
$pattern = '/^https?:\/\/([a-zA-Z0-9_\-]+:[^\s@:]+@)?((([a-zA-Z][a-zA-Z0-9\-]+\.)+[a-zA-Z\-]+)|((2(5[0-5]|[0-4][0-9])|[01][0-9]{2}|[0-9]{1,2})\.(2(5[0-5]|[0-4][0-9])|[01][0-9]{2}|[0-9]{1,2})\.(2(5[0-5]|[0-4][0-9])|[01][0-9]{2}|[0-9]{1,2})\.(2(5[0-5]|[0-4][0-9])|[01][0-9]{2}|[0-9]{1,2})))(:[0-9]{1,5})?(\/[!~*\'\(\)a-zA-Z0-9;\/\\\?:\@&=\+\$,%#\._-]*)*$/';
此模式允许子域、ipv4字符串等。因为这是针对目录的,所以它不允许通常有效的字符串,例如http://localhost
但无论如何,我需要添加的是对ipv6 IP字符串和国际域名(例如müller.com)的支持
我目前使用:
$url = "http://müller.com/"
if(preg_match($pattern,$url)) {
echo "valid";
} else {
echo "invalid";
}
它几乎验证了我希望它验证的所有内容,除了ipv6地址和外来字符
我想知道是否有人能想出两个补充,因为这将真正使我的一天。请注意,我对PHP非常陌生,所以请不要向我扔东西。相反,如果您能向我展示一个工作示例并解释您所添加的内容,那将非常有用
可能需要先将外来内容转换为有效的PunycodeURL,然后再检查它,然后允许使用punycode。我愿意听取建议
非常感谢你,非常感谢你的帮助
编辑:我怀疑这个问题是重复的,因为我不是在寻找一个类似的解决方案,加上引用的现有解决方案不起作用。FILTER_VALIDATE_URL不起作用,因为它将允许我不想允许的字符串,而其他解决方案也会使我的正则表达式模式无用
我正在寻找的是我所拥有的,但另外还支持ipv6 IP字符串和punycode名称/国际名称。我想这就是您所寻找的。我发现了一个非常大的ipv6地址正则表达式。这似乎是一个所有情况下的正则表达式。若你们认为你们不需要如此深入地验证地址,你们可以很容易地在互联网上找到更弱的版本。无论如何,您需要抓取其中一个正则表达式,并将其按如下方式放入当前正则表达式:
..{2}|[0-9]{1,2}))|(:[0-9]{1,5})?…