【问题标题】:RegEx to remove http://www. if it exists in PHP and JS正则表达式删除 http://www。如果它存在于 PHP 和 JS 中
【发布时间】:2012-12-28 16:38:21
【问题描述】:

有人可以帮我用一个正则表达式(我在 php 和 js 中需要它)来删除 http:// 和 www。从 url 字符串的开头并删除尾随 /(如果有)。

举例

  • http://www.google.com/ 将是 google.com
  • https://yahoo.com?page=1 应该是yahoo.com?page=1
  • fancysite.com/articles/2012/ 将是 fancysite.com/articles/2012

这是我用于 JS 端的代码:

row.page_href.replace(/^(https?|ftp):\/\//, '')

这是我用于 php 端的代码:

$urlString = rtrim($urlString, '/');
$urlString = preg_replace('~^(?:https?://)?(?:www[.])?~i', '', $urlString);

如您所见,JS 正则表达式当前仅删除 http://,而 php 需要两个步骤来完成所有操作。

【问题讨论】:

  • 为什么不将www 添加到 JS 正则表达式中?或者你为什么不在这两种情况下使用相同的?我不认为 PHP 需要你从字符串末尾修剪一个可能的/...这就是你选择这样做的方式。
  • 请问为什么?这只是锚文本吗?
  • right 正则表达式适用于 JS 和 PHP。
  • 这是我项目的要求...你为什么要问我为什么需要一些东西?不,这根本不是锚文本。
  • 但是...^(?:https?://)?(?:www[.])? 有什么问题?对我来说看起来不错,只需在 JS 和 PHP 中使用即可。

标签: php javascript regex


【解决方案1】:
function cleanUrl($url)
{
  if (($d= parse_url($url)) !== false) // valid url
  {
    return sprintf('%s%s%s',
      ltrim($d['host'], 'www.'),
      rtrim($d['path']. '/'),
      !empty($d['query']) ? '?'.$d['query'] : '');
  }
  return $url;
}

我会利用 parse_url(验证 url 以及“清理”它)

【讨论】:

  • 呃,我怎么没想到。由于某些原因,我总是忘记该功能。使用这个 OP。
  • 我使用正则表达式是因为我认为它比解析和修剪 URL 更快。我的假设有误吗?
  • @RachelD:Regex 需要比php's plain string parser 更多的开销。出于这个原因,我认为正则表达式的开销超出了必要的范围。
【解决方案2】:

#(https?(://))?(www.?)?(.*)#i

对我来说工作得很好。您可以更改最后一个 (.*) 以匹配 URL 的 RFC 标准。

输出:

david@david-desktop ~ $ php -a
Interactive shell

php > $str = preg_replace('#(https?(://))?(www.?)?(.*)#i', '$4', 'https://www.google.ca');
php > echo $str . PHP_EOL;
google.ca
php > $str = preg_replace('#(https?(://))?(www.?)?(.*)#i', '$4', 'https://google.ca');
php > echo $str . PHP_EOL;
google.ca
php > $str = preg_replace('#(https?(://))?(www.?)?(.*)#i', '$4', 'http://google.ca');
php > echo $str . PHP_EOL;
google.ca
php > 

【讨论】:

  • 谢谢我有一些与此非常相似的东西,但它没有按照我的意愿做,所以我认为我走错了路。我会更多地玩这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2010-10-20
相关资源
最近更新 更多