在表单中格式化电话号码
如果您希望在
ActiveForm
您可以使用
\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()
。
将电话号码格式化为文本
-
Extending the \yii\i18n\Formatter
但是,如果您想以上述格式将电话号码打印为文本,那么一个好方法是扩展
yii\i18n\Formatter
并在let say中创建自定义组件/辅助对象
common\components\
或
app\components\
使用以下代码。
注意:更改
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})$/", "($1)-$2-$3-$4", $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>