代码之家  ›  专栏  ›  技术社区  ›  ZULI

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

  •  1
  • ZULI  · 技术社区  · 6 年前

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

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

    我不想建一个花园,很明显,已经有现成的解决方案了。

    In控制器

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

    在视图中显示电话。php

    <?= Html::encode($phone) ?>
    
    1 回复  |  直到 6 年前
        1
  •  5
  •   Muhammad Omer Aslam    6 年前

    在表单中格式化电话号码

    如果您希望在 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>