Yii2:将 phone 掩码显示为文本
Yii2 : Display the phone mask as text
告诉我如何以可读的方式制作 phone 输出?
它在数据库中存储为 1234567890
,但您需要显示用户 - (123) 456-78-90
。
我不想做花园,显然,通常已经有现成的解决方案。
在控制器中
public function actionShowPhone()
{
$phone = "1234567890";
return $this->render('show-phone', ['phone' => $phone,]);
}
在视图中显示-phone.php
<?= Html::encode($phone) ?>
格式化 phone 表单中的数字
如果您希望在 ActiveForm
中格式化 phone 数字,您可以按以下方式使用 \yii\widgets\MaskInput
<?=
$form->field($model, 'landline_phone')->widget(\yii\widgets\MaskedInput::className(), [
'mask' => '(999)-999-99-99'
]);
?>
或没有ActiveForm
echo \yii\widgets\MaskedInput::widget([
'name' => 'phone',
'mask' => '(999)-999-99-99',
]);
注意:保存phone
字段时,您必须将其保存为数据库中的数字,如1234567890
,因此在保存之前您可以使用$this->landline_phone= preg_replace('/[^0-9]+/', '', $this->landline_phone);
里面的beforeSave()
.
将 Phone 数字格式化为文本
Extending the \yii\i18n\Formatter
但是如果你想以上述格式将 phone 数字打印为文本,那么一个好方法是扩展 yii\i18n\Formatter
并创建自定义 component/helper 让我们说 common\components\
或 app\components\
使用以下代码。
注意:相应地为 class 更改 namespace
<?php
namespace common\components;
use yii\i18n\Formatter;
class FormatterHelper extends Formatter {
public function asPhone($value) {
return preg_replace("/^(\d{3})(\d{3})(\d{2})(\d{2})$/", "()---", $value);
}
}
然后在 common\config\main.php
或 app\config\web.php
下添加以下 components
.
'formatter' => [
'class' => '\common\components\FormatterHelper',
'locale' => 'en-US',
'dateFormat' => 'yyyy-MM-dd',
'datetimeFormat' => 'yyyy-MM-dd HH:mm:ss',
'decimalSeparator' => '.',
'thousandSeparator' => ',',
'currencyCode' => 'USD'
],
然后你就可以像下面这样使用了
echo Yii::$app->formatter->asPhone('123456789')
它将输出以下内容作为文本
(123)-456-78-90
Using \yii\widgets\MaskedInputAssets
另一种最简单的方法是注册可用的 MaskedInputAssets
捆绑使用 RobinHerbots/Inputmask
并使用 javascript 屏蔽文本
<?php
\yii\widgets\MaskedInputAsset::register($this);
$js = <<<SCRIPT
var selector = document.getElementById("mask");
var im = new Inputmask("(999)-999-99-99");
im.mask(selector);
SCRIPT;
// Register tooltip/popover initialization javascript
$this->registerJs ( $js , \yii\web\View::POS_READY);
?>
<div id="mask">
1234567890
</div>
告诉我如何以可读的方式制作 phone 输出?
它在数据库中存储为 1234567890
,但您需要显示用户 - (123) 456-78-90
。
我不想做花园,显然,通常已经有现成的解决方案。
在控制器中
public function actionShowPhone()
{
$phone = "1234567890";
return $this->render('show-phone', ['phone' => $phone,]);
}
在视图中显示-phone.php
<?= Html::encode($phone) ?>
格式化 phone 表单中的数字
如果您希望在 ActiveForm
中格式化 phone 数字,您可以按以下方式使用 \yii\widgets\MaskInput
<?=
$form->field($model, 'landline_phone')->widget(\yii\widgets\MaskedInput::className(), [
'mask' => '(999)-999-99-99'
]);
?>
或没有ActiveForm
echo \yii\widgets\MaskedInput::widget([
'name' => 'phone',
'mask' => '(999)-999-99-99',
]);
注意:保存phone
字段时,您必须将其保存为数据库中的数字,如1234567890
,因此在保存之前您可以使用$this->landline_phone= preg_replace('/[^0-9]+/', '', $this->landline_phone);
里面的beforeSave()
.
将 Phone 数字格式化为文本
Extending the \yii\i18n\Formatter
但是如果你想以上述格式将 phone 数字打印为文本,那么一个好方法是扩展
yii\i18n\Formatter
并创建自定义 component/helper 让我们说common\components\
或app\components\
使用以下代码。注意:相应地为 class 更改
namespace
<?php namespace common\components; use yii\i18n\Formatter; class FormatterHelper extends Formatter { public function asPhone($value) { return preg_replace("/^(\d{3})(\d{3})(\d{2})(\d{2})$/", "()---", $value); } }
然后在
common\config\main.php
或app\config\web.php
下添加以下components
.'formatter' => [ 'class' => '\common\components\FormatterHelper', 'locale' => 'en-US', 'dateFormat' => 'yyyy-MM-dd', 'datetimeFormat' => 'yyyy-MM-dd HH:mm:ss', 'decimalSeparator' => '.', 'thousandSeparator' => ',', 'currencyCode' => 'USD' ],
然后你就可以像下面这样使用了
echo Yii::$app->formatter->asPhone('123456789')
它将输出以下内容作为文本
(123)-456-78-90
Using \yii\widgets\MaskedInputAssets
另一种最简单的方法是注册可用的
MaskedInputAssets
捆绑使用RobinHerbots/Inputmask
并使用 javascript 屏蔽文本<?php \yii\widgets\MaskedInputAsset::register($this); $js = <<<SCRIPT var selector = document.getElementById("mask"); var im = new Inputmask("(999)-999-99-99"); im.mask(selector); SCRIPT; // Register tooltip/popover initialization javascript $this->registerJs ( $js , \yii\web\View::POS_READY); ?> <div id="mask"> 1234567890 </div>