Yii2:将手机掩码显示为文本

ZUL*_*ULI 1 yii2 yii2-advanced-app

告诉我如何使手机以可读的方式输出?

它在数据库中存储为1234567890,但您需要显示用户 - (123) 456-78-90

我不想建造一个花园,显然,通常已经有现成的解决方案。

在控制器中

public function actionShowPhone()
{
 $phone = "1234567890";
 return $this->render('show-phone', ['phone' => $phone,]);
}
Run Code Online (Sandbox Code Playgroud)

在查看show-phone.php

<?= Html::encode($phone) ?>
Run Code Online (Sandbox Code Playgroud)

Muh*_*lam 6

在表单中设置电话号码的格式

如果您想格式化内部的电话号码,ActiveForm可以\yii\widgets\MaskInput按以下方式使用

<?=
$form->field($model, 'landline_phone')->widget(\yii\widgets\MaskedInput::className(), [
    'mask' => '(999)-999-99-99'
]);
?>
Run Code Online (Sandbox Code Playgroud)

或没有ActiveForm

echo \yii\widgets\MaskedInput::widget([
    'name' => 'phone',
    'mask' => '(999)-999-99-99',
]);
Run Code Online (Sandbox Code Playgroud)

注意:保存phone字段时,您必须仅将其保存为数据库中的数字,这样1234567890在保存之前您可以$this->landline_phone= preg_replace('/[^0-9]+/', '', $this->landline_phone);beforeSave().

将电话号码格式设置为文本

  • Extending the \yii\i18n\Formatter

    但是,如果您想以上述格式将电话号码打印为文本,那么一个好方法是扩展yii\i18n\Formatter并创建一个自定义组件/帮助程序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);
        }
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

    然后在common\config\main.phpapp\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'
    ],
    
    Run Code Online (Sandbox Code Playgroud)

    然后你可以像下面一样使用它

    echo Yii::$app->formatter->asPhone('123456789')
    
    Run Code Online (Sandbox Code Playgroud)

    它将输出以下文本

    (123)-456-78-90 
    
    Run Code Online (Sandbox Code Playgroud)
  • 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>
    
    Run Code Online (Sandbox Code Playgroud)