我想将所有月份翻译成西班牙语,我正在尝试用1月份。代码如下:
if(preg_match('/^January\s\d+$/', $month)){
$pattern = '/^January$/';
$replace = '/^Enero$/';
preg_replace($pattern, $replace, $month);
}
return $month;
它返回“1月”,而不是“Enero”。这个问题在哪里?
此致
答案 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