0

我目前使用下面的脚本来获取任何形式的信息并提取数字来制作一个带有破折号的电话号码。但是,如果我不小心单击了该字段,即使没有粘贴或键入任何内容,它也会在其中放置两个破折号。JS 是否有办法说只有在粘贴某些内容时才添加破折号?这很痛苦的原因是我有 2 个搜索字段,如果我想使用一个,另一个必须是空白的。因此,如果其中有 2 个破折号,我必须将它们删除并在同一字段中按 Enter 键,否则它将再次添加它们。

感谢您提供的任何帮助。

<SCRIPT LANGUAGE="JavaScript">
    function addDashes(f)
    {
        f.value = f.value.replace(/\D/g, '');
        f.value = f.value.slice(0,3)+"-"+f.value.slice(3,6)+"-"+f.value.slice(6,15);
    }
</SCRIPT>
4

2 回答 2

2

我会用这样的东西:

function addDashes(f) {
    f.value = f.value.replace(/(\d{3})-?(\d{3})-?(\d{9})/, '$1-$2-$3');
}

只有当你有 15 位数字时它才会起作用(可能已经有破折号)。

于 2012-11-19T18:26:52.967 回答
0

我不太确定这是否是您需要的,但这只是在格式化之前检查是否确实存在某些东西:

function addDashes(f)
{
    var oldVal = f.value.replace(/\D/g, '');
    if (oldVal.length) {
        f.value = oldVal.slice(0,3) + "-" + oldVal.slice(3,6) + "-" + oldVal.slice(6,15);
    }
}

编辑:

根据您的评论,我认为提出验证可能会有所帮助。我不确定你是否在服务器端做任何事情来确保它是一个有效的电话号码,但是做一些验证可能会有所帮助,所以如果用户刚刚输入了一些,你就不要添加破折号空格。

首先,我会在您检查长度之前删除非数字值。我已经更新了上面的代码来做到这一点。

接下来,我会检查一些长度。如果数字长度至少为 9 位,您可能只想添加破折号。您可以决定要检查的长度。在这种情况下,您将添加:

if (oldVal.length >= 9) { ...

这完全取决于您是否/如何验证此字段。

于 2012-11-19T18:04:19.420 回答