0

可能重复:
URL 的 PHP 验证/正则表达式
如何使用 Regex 和 Php 验证域名?

我目前使用此正则表达式模式在将域名添加到我的数据库之前对其进行验证:

$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 非常陌生,所以请不要向我扔东西。相反,如果您可以向我展示一个工作示例并解释您添加的内容,那将会更加有用。

也许需要在检查之前将外国内容转换为有效的 punycode URL,然后改为允许 punycode。我愿意接受建议。

非常感谢 - 非常感谢您的帮助

编辑:我怀疑这个问题是重复的,因为我不是在寻找类似的解决方案,而且提到的现有解决方案不起作用。FILTER_VALIDATE_URL 不起作用,因为它将允许我不想允许的字符串,并且其他解决方案也使我的正则表达式模式无用。

我正在寻找的是我所拥有的,但还支持 ipv6 IP 字符串和 punycode 名称/国际名称。

4

0 回答 0