我是Vue.js的新手,试图找到一种方法来将输入字段中的电话号码格式化为所需的格式。我能够在stackoverflow上找到一个用纯javascript编写的答案,但我不知道如何在Vue中使用正则表达式。
JavaScript中的解决方案
document.getElementById('phone').addEventListener('input', function (e) {
var x = e.target.value.replace(/\D/g, '').match(/(\d{0,3})(\d{0,3})(\d{0,4})/);
e.target.value = !x[2] ? x[1] : '(' + x[1] + ') ' + x[2] + (x[3] ? '-' + x[3] : '');
});
所以我的问题是如何在这个输入div上应用它?所以它允许用户只输入数字,当他输入数字时,数字以所需的格式显示。
<div contentEditable="true" class="inputDiv"></div>
例如,我想使用vue.js实现什么。
document.getElementById('phone').addEventListener('input', function (e) {
var x = e.target.value.replace(/\D/g, '').match(/(\d{0,3})(\d{0,3})(\d{0,4})/);
e.target.value = !x[2] ? x[1] : '(' + x[1] + ') ' + x[2] + (x[3] ? '-' + x[3] : '');
});
<input type="text" id="phone" placeholder="(555) 555-5555"/>
我试图寻找一个答案,这可能是相当直截了当的,但因为我是新的Vue我无法找到任何可以帮助我使它工作。
7条答案
按热度按时间svmlkihl1#
你可能需要看看vue是如何工作的,并进行一些演练以获得更好的理解。
他们的文档很棒,你可以从那里开始-https://v2.vuejs.org/v2/guide/
对于这个问题,这里有一个方法可以利用框架
vpfxa7rd2#
介绍Vue-The-Mask。
npm install vue-the-mask
在您的组件中
u4vypkhs3#
我的5美分。假设你有一个手机模型,你希望应用格式。
您的模板看起来像这样:
因此,在输入时,调用enforcePhoneFormat()方法,该方法使用正则表达式并将输入转换为以下格式-
(123) 345-6789
。当然,要更改首选格式,必须更改正则表达式。
1bqhqjot4#
通常在Vue中,你用v-model处理表单。在一个典型的表单中,你可能在你的组件中有一个
phoneNumber
变量,并将它绑定到v-model
的输入:问题是
v-model
不允许在用户输入时动态更改值,所以这对您不起作用。但是,您仍然可以使用
v-bind
提供值,并使用v-on
对用户输入做出React,而不是使用v-model
进行绑定。下面的代码片段将始终转换用户写入mayus的任何内容:将格式应用于电话号码比
toUpperCase()
稍微复杂一点,但想法是一样的:pexxcrt25#
我建议使用一些开源的Vue组件来进行电话输入,比如:
https://github.com/LouisMazel/vue-phone-number-input
或
https://www.npmjs.com/package/vue-tel-input
他们真的很容易使用,它会保存你很多,因为你会浪费自己的电话输入组件。
tvz2xvvm6#
对@Satyam Pathak代码进行了轻微修改,以支持动态传入属性名称。
wz3gfoph7#
你可以使用上面的fnc。
我就是这样用的。