使用preg_replace - PHP将月份转换为西班牙语

时间:2014-02-13 13:47:42

标签: php preg-replace preg-match

我想将所有月份翻译成西班牙语,我正在尝试用1月份。代码如下:

  if(preg_match('/^January\s\d+$/', $month)){
    $pattern = '/^January$/';
    $replace = '/^Enero$/';
    preg_replace($pattern, $replace, $month);
  }
  return $month;

它返回“1月”,而不是“Enero”。这个问题在哪里?

此致

4 个答案:

答案 0 :(得分:1)

最优雅的方法是使用英语月份创建一个数组,使用西班牙语创建另一个数组,然后使用str_replace:http://es1.php.net/str_replace

这样的事情:

<?php   

$healthy = array("fruits", "vegetables", "fiber");
$yummy   = array("pizza", "beer", "ice cream");

$newphrase = str_replace($healthy, $yummy, $phrase);

?>

答案 1 :(得分:1)

你从一个稍微错误的角度接近问题。正则表达式不是将月份转换为其他语言的正确方法。如果您打算使用正则表达式,则必须使用多个if语句(或switch构造)才能完成此操作。使用数组对我来说似乎是最好的方法。

如何获得格里高利月的西班牙语等值

创建一个关联数组,其中英文月份名称作为键,其西班牙语等价物作为值。现在要获取西班牙语月份名称,您只需从定义的数组中访问相应的数组值:

$spanish_months = array(
    'January' => 'enero',
    'February' => 'febrero',
    'March' => 'marzo',
    'April' => 'abril',
    'May' => 'mayo',
    'June' => 'junio',
    'July' => 'julio',
    'August' => 'agosto',
    'September' => 'septiembre',
    'October' => 'octubre',
    'November' => 'noviembre',
    'December' => 'diciembre'
);

$month = 'January';
echo $spanish_months[$month]; // "enero"

为什么正则表达式解决方案不起作用

仅当字符串满足格式preg_match时,TRUE语句才会评估为month_name[space]date,但preg_replace语句仅在模式为格式{时才会替换{1}} - 格式永远不会相同。此外,替换字符串应该是字符串,而不是正则表达式。

这可能就是你要找的东西:

month_name

我已经改进了正则表达式以便稍微匹配日期,但这仍然允许很多不正确的日期传递。如果您只是想尝试,那么这很好。否则,您应该使用DateTime课程来验证日期和时间。

答案 2 :(得分:0)

最后不要锚定:

$pattern = '/^January/';

替换不是正则表达式:

$replace = 'Enero';

答案 3 :(得分:0)

$meses_ingles = array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
$meses_espanol = array("ENE", "FEB", "MAR", "ABR", "MAY", "JUN", "JUL", "AGO", "SEP", "OCT", "NOV", "DIC");
str_ireplace($meses_ingles, $meses_espanol, strval(date('d-M-Y', strtotime($pedidos["creado"]))));

享受好友:D