[解決済み] Angularで電話番号の入力をフォーマットする
2022-02-19 08:32:37
質問
Angularjsで電話番号の入力フィールドをフォーマットするソリューションをたくさん見てきましたが、Angular 7に関するものは見当たりません。私が本質的に望んでいるのは、ユーザーがテキストフィールドに次のように入力することです。
123456789
というように、テキストフィールドに入力をフォーマットするためのものです。
(123) 456-789
というのはどうすればいいのでしょうか?以下の正規表現で検証することがわかりました。
^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$
解決方法は?
以下のように Phone Mask ディレクティブで処理することができます。
export class PhoneMaskDirective {
constructor(public ngControl: NgControl) { }
@HostListener('ngModelChange', ['$event'])
onModelChange(event) {
this.onInputChange(event, false);
}
@HostListener('keydown.backspace', ['$event'])
keydownBackspace(event) {
this.onInputChange(event.target.value, true);
}
onInputChange(event, backspace) {
let newVal = event.replace(/\D/g, '');
if (backspace && newVal.length <= 6) {
newVal = newVal.substring(0, newVal.length - 1);
}
if (newVal.length === 0) {
newVal = '';
} else if (newVal.length <= 3) {
newVal = newVal.replace(/^(\d{0,3})/, '($1)');
} else if (newVal.length <= 6) {
newVal = newVal.replace(/^(\d{0,3})(\d{0,3})/, '($1) $2');
} else if (newVal.length <= 10) {
newVal = newVal.replace(/^(\d{0,3})(\d{0,3})(\d{0,4})/, '($1) $2-$3');
} else {
newVal = newVal.substring(0, 10);
newVal = newVal.replace(/^(\d{0,3})(\d{0,3})(\d{0,4})/, '($1) $2-$3');
}
this.ngControl.valueAccessor.writeValue(newVal);
}
}
関連
-
[解決済み] Angular EXCEPTION: Http用のプロバイダがありません。
-
[解決済み] updateValueAndValidityとは?
-
[解決済み] "rxjs" observable.throw は関数ではありません - Angular4
-
[解決済み] 安全でない値」の例外を発生させずに <iframe src="..."> を設定するにはどうしたらよいですか?
-
[解決済み] Angular2の$document.ready()に相当します。
-
[解決済み] ngModel' は 'input' の既知のプロパティではないため、バインドできません。
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] Angular HTMLバインディング
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] Android端末の電話番号をプログラムで取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】angular 4アプリにReactiveFormsModuleを追加すると、NgControl用のプロバイダがないエラーが発生する。
-
[解決済み】Angularのエラーです。NgModuleアノテーションを追加してください。
-
[解決済み】本番モードを有効にするには?
-
[解決済み] Angular 5:"ControlContainerのプロバイダがありません"
-
[解決済み] NullInjectorError: MatDialogRef 用のプロバイダがありません
-
[解決済み] ERROR エラーです。StaticInjectorError(AppModule)[UserformService -> HttpClient]です。
-
[解決済み] updateValueAndValidityとは?
-
[解決済み] Angular 6 Error trying to diff '[object Object]'. 配列と反復記号のみが許可されます。
-
[解決済み] Error.を修正する方法 No value accessor for form control with name' in Angular Unit Test?
-
[解決済み] Angular2: [(ngModel)] with [ngModelOptions]="{standalone: true}"を使って、モデルのプロパティへの参照にリンクさせる。