@FreezkoSS

При формировании маски телефона происходит дублирование символов, что с этим можно сделать?

Маска номера телефона выведена в отдельный компонент, чтобы можно было применить его в разных компонентах.

Создан файл Vue PhoneNumber.Vue

<template src="./template.html"/>

<script lang="ts">
    import { defineComponent } from 'vue';

    export default defineComponent({
        name: 'PhoneNumberView',
        props: ['value'],
        beforeMount(): void {
            this.number = this.value || '+7  ';
        },
        data: function () {
            return {
                number: '',
            }
        },
        methods: {
            numberChange() {
                this.number = this.number.replace(/^\+7(\d{3})?(\d{3})?(\d{4})?/g, '+7 ($1) $2-$3')
                this.$emit('numberChange', this.number);
            }
        }
    });
</script>

<style scoped lang="less" src="./style.less"></style>


Далее создан шаблон template.html:
<el-input
        v-model="number"
        :clearable="true" :show-word-limit="true"
        :autosize="true"
        @blur="numberChange"
/>


в данном шаблоне используется вызов метода NumberChange, который и использует регульное выражение.

Далее поле создается в др компоненте и вызывается метод NumberChange:
<el-form-item label="Телефон" prop="telephone">
                <PhoneNumber :value="localData.telephone" @numberChange="numberChange"/>
           </el-form-item>


И при заполнении поля и клике за его пределами первый раз, все норм:
62d91748b970f980667218.png

Но стоит клиткнуть еще пару раз, то все ломается:
62d9175d659f1854439253.png

Как это можно исправить или метод @blur нужно заменить на что-то другое? Хелп!!
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
@penushkin
проблема то не в @blur, как костыль можешь перед this.number.replace удалять все что что не цифра и не +, но вообще странно валидировать при @blur, я бы делал на изменение, ну или подшаманить регулярку, но в них я слаб =), но очень странная валидация
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы