php - 使用 eregi() 但现在使用 preg_match 进行 URL 验证

标签 php preg-match eregi

eregi() 已弃用,需要替换为 preg_match。如何将以下语法转换为 preg_match?假设以下是 url 并且它是必需的正则表达式模式:

$url = "https://james.wordpress.com/2013/05/13/my-product-final";
$urlregex = "^(https?|ftp)\:\/\/([a-zåäöÅÄÖæÆøØ0-9+!*(),;?&=\$_.-]+(\:[a-zåäöÅÄÖæÆøØ0-9+!*(),;?&=\$_.-]+)?@)?[a-zåäöÅÄÖæÆøØ0-9+\$_-]+(\.[a-zåäöÅÄÖæÆøØ0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-zåäöÅÄÖæÆøØ0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-zåäöÅÄÖæÆøØ0-9;:@/&%=+\$_.-]*)?(#[a-z_.-][a-zåäöÅÄÖæÆøØ0-9+\$_.-]*)?\$";

以下代码工作正常:

if (eregi($urlregex, $url)) {
echo "Valid";
exit;
}

我试图转换成 'preg_match' 但它不起作用:

if (preg_match("#$urlregex#i", $url)) {
echo "Valid";
exit;
}

也试过这样:

if (preg_match('/'.$urlregex.'/i', $url))

最佳答案

它不起作用,因为您用作分隔符的字符(即 #)存在于正则表达式中。

您可以:

  • 转义正则表达式中的#:\#
  • 将分隔符更改为正则表达式中不存在的字符

关于php - 使用 eregi() 但现在使用 preg_match 进行 URL 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18488254/

相关文章:

php - 在 preg_replace 中使用 £ 作为定界符可以吗?

php - 如何将以下表达式从 POSIX 转换为 PCRE?

php - 我该如何解决 “Deprecated: Function eregi() is deprecated”错误

php - 获取我的应用程序数据 iTunes Connect

php - 如何更改 preg_match PHP 中的整数值?

php - 使用 PHP 获取 DOM 元素字符串

php - 为允许 (!@#$%) 的密码验证创建 preg_match

Bootstrap 模式中的 PHP 不工作

php - 超时错误和连接丢失

php - 在 Linux 上为 PHP5 配置 xDebug