我使用char(10)将电话号码存储在数据库中,例如它们看起来是4155551212
。
我希望Twig模板将它们显示为(415) 555-1212
。
这是如何最好地完成的?
不必每次都添加这个过滤器,这会很好,但它会满足我的需求。
<?php
require_once '../../../vendor/autoload.php';
Twig_Autoloader::register();
try {
$loader = new Twig_Loader_Filesystem('templates');
$twig = new Twig_Environment($loader, array('debug' => true,));
$twig->addExtension(new Twig_Extension_Debug());
$twig->addFilter(new Twig_SimpleFilter('phone', function ($num) {
return ($num)?'('.substr($num,0,3).') '.substr($num,3,3).'-'.substr($num,6,4):' ';
}));
echo $twig->render('filter.html', array('phone'=>'4155551212'));
} catch (Exception $e) {
die ('ERROR: ' . $e->getMessage());
}
?>
filter.html
{{ phone|phone }}
以下是如何在Symfony中执行此操作。
namespace AppBundle'Twig;
use Twig'Extension'AbstractExtension;
use Twig'TwigFilter;
class AppExtension extends AbstractExtension {
public function getFilters() {
return [
new TwigFilter('phone', [$this, 'phoneFilter']),
];
}
public function phoneFilter($phoneNumber) {
if (substr($phoneNumber, 0, 2) == "+1") {
return preg_replace("/('+1)('d{3})('d{3})('d{4})/", "$1 ($2) $3-$4", $phoneNumber);
}
return preg_replace("/('d{3})('d{3})('d{4})/", "($1) $2-$3", $phoneNumber);
}
}
$numberPhone = '4155551212';
$firstChain = substr($numberPhone, 0, 3);
$secondChain = substr($numberPhone, 3, 3);
$thirdChain = substr($numberPhone, 6, 4);
$formatedNumberPhone = '(' . $firstChain . ') ' . $secondChain . '-' . $thirdChain;
echo $formatedNumberPhone;
以下是那些对此有类似问题的人的解决方案。
关于substr()如何工作的一点解释:
在这种情况下需要三个论点:
- 要修改的链
- 表示函数开始处理的位置的索引
- 你想保存多少个克拉
请注意,您可以将负值传递给第二个和第三个参数(请参阅官方文档了解更多信息)。
在这种情况下,我取的是电话号码的第一个字符,所以我会告诉函数从0开始,并保留3个字符,看起来像是我做的:susbtr($numberPhone, 0, 3)
。
希望它能有所帮助!
Eu fiz assim: {{ p.number[:4] }} - {{ p.number[4:]}}
I did that way: {{ p.number[:4] }} - {{ p.number[4:]}}
美国格式的电话号码:{{Phone_Number | Phone | default("-")}}