Html 离子3 CPF/CNPJ面罩

Html 离子3 CPF/CNPJ面罩,html,angular,typescript,ionic3,Html,Angular,Typescript,Ionic3,我正在寻找CPF/CNPJ的面具,这两种面具一起使用。 事实上,我用这个作为解决方案,但它不能把cpf和cnpj放在一起 <form #signForm="ngForm"> <ion-item> <ion-label floating>CPF/CNPJ</ion-label> <ion-input type="tel" name="cgc" ngModel [brmaske

我正在寻找CPF/CNPJ的面具,这两种面具一起使用。 事实上,我用这个作为解决方案,但它不能把cpf和cnpj放在一起

<form #signForm="ngForm">
 <ion-item>
  <ion-label floating>CPF/CNPJ</ion-label>
  <ion-input type="tel" name="cgc" ngModel [brmasker]="{mask:'000.000.000-00', len:14}" [brmasker]="{mask:'00.000.000/0000-00', len:18}"></ion-input>
 </ion-item>
<ion-item>

CPF/CNPJ

我需要一个展台的面具。。。请给我一些提示?

经过几天寻找解决方案,我自己创建了一个简单有效的解决方案。所以我想和社区分享这个解决方案,如果你想,你可以改进它并再次分享

login.html


CPF/CNPJ
登录
login.ts

import{MenuController,NavParams,ModalController}来自'ionic angular';
从“离子角度”导入{IonicPage,NavController};
从'ionic angular'导入{AlertController};
从'@angular/core'导入{Component};
@IonicPage()
@组成部分({
选择器:“页面登录”,
templateUrl:'login.html',
})
导出类登录页{
cpf_cnpj=“”;
十进制分隔符=“.”;
组_分隔符=“,”;
纯结果:任何;
面具:任何;
瓦尔:任何;
五:有;
建造师(
公共modalCtrl:ModalController,
私有alertCtrl:AlertController,
专用菜单:菜单控制器,
公共navCtrl:NavController,
){} 
ionViewDidEnter(){
此.menu.swipeneable(错误);
}
ionViewWillLeave(){
此.menu.swipeneble(真);
}
格式(valString){
如果(!valString){
返回“”;
}
设val=valString.toString();
const parts=this.unFormat(val).split(this.DECIMAL_分隔符);
this.pureResult=零件;

如果(零件[0].length实际上BR Masker有此选项:

[brmasker]="{person: true}"

通过这种方式,CPF/CNPJ号码会自动格式化!

有错误吗……?你能告诉我这是什么意思吗?
CPF/CNPJ
“@Sampath CPF表示巴西公民ID,CNPJ表示公司ID。哦……看起来这是给巴西人的:)看来这份回购协议也有错误的信息。它说的是
ionic 3.9.2
。但ionic团队已经发布了
3.7.1
:D
import { MenuController, NavParams, ModalController } from 'ionic-angular';
import { IonicPage, NavController } from 'ionic-angular';
import { AlertController } from 'ionic-angular';
import { Component } from '@angular/core';

@IonicPage()
@Component({
  selector: 'page-login',
  templateUrl: 'login.html',
})
export class LoginPage {

  cpf_cnpj = '';
  DECIMAL_SEPARATOR=".";
  GROUP_SEPARATOR=",";
  pureResult: any;
  maskedId: any;
  val: any;
  v: any;

constructor(
  public modalCtrl: ModalController, 
  private alertCtrl: AlertController,
  private menu: MenuController,
  public navCtrl: NavController, 
  ){} 

  ionViewDidEnter() {
    this.menu.swipeEnable(false);
  }
  ionViewWillLeave(){
    this.menu.swipeEnable(true);
  }

  format(valString) {
    if (!valString) {
        return '';
    }
    let val = valString.toString();
    const parts = this.unFormat(val).split(this.DECIMAL_SEPARATOR);
    this.pureResult = parts;
    if(parts[0].length <= 11){
      this.maskedId = this.cpf_mask(parts[0]);
      return this.maskedId;
    }else{
      this.maskedId = this.cnpj(parts[0]);
      return this.maskedId;
    }
};

unFormat(val) {
    if (!val) {
        return '';
    }
    val = val.replace(/\D/g, '');

    if (this.GROUP_SEPARATOR === ',') {
        return val.replace(/,/g, '');
    } else {
        return val.replace(/\./g, '');
    }
};

 cpf_mask(v) {
    v = v.replace(/\D/g, ''); //Remove tudo o que não é dígito
    v = v.replace(/(\d{3})(\d)/, '$1.$2'); //Coloca um ponto entre o terceiro e o quarto dígitos
    v = v.replace(/(\d{3})(\d)/, '$1.$2'); //Coloca um ponto entre o terceiro e o quarto dígitos
    //de novo (para o segundo bloco de números)
    v = v.replace(/(\d{3})(\d{1,2})$/, '$1-$2'); //Coloca um hífen entre o terceiro e o quarto dígitos
    return v;
}

 cnpj(v) {
    v = v.replace(/\D/g, ''); //Remove tudo o que não é dígito
    v = v.replace(/^(\d{2})(\d)/, '$1.$2'); //Coloca ponto entre o segundo e o terceiro dígitos
    v = v.replace(/^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3'); //Coloca ponto entre o quinto e o sexto dígitos
    v = v.replace(/\.(\d{3})(\d)/, '.$1/$2'); //Coloca uma barra entre o oitavo e o nono dígitos
    v = v.replace(/(\d{4})(\d)/, '$1-$2'); //Coloca um hífen depois do bloco de quatro dígitos
    return v;
}

  public login(formData) { 
       ....you auth code here.
}
[brmasker]="{person: true}"