插入字符以输入为电话号码

时间:2019-06-05 18:16:19

标签: javascript jquery

我该如何解决此代码以仅在第三个数字后才应用-,所以输出看起来像

  

778-2299

不是778-229-9,因为您可以看到代码是每3位数字后添加-

$('.phonenumber').keyup(function() {
  var foo = $(this).val().split("-").join(""); // remove hyphens
  if (foo.length > 0) {
    foo = foo.match(new RegExp('.{1,3}', 'g')).join("-");
  }
  $(this).val(foo);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" class="phonenumber" maxlength="8"/>

3 个答案:

答案 0 :(得分:2)

您可以使用:

  

.replace(regexp|substr, newSubstr|function):...方法返回一个新字符串,该字符串的部分或全部匹配都由替换符替换。

$('.phonenumber').keyup(function() {
  var foo = $(this).val().split("-").join(""); // remove hyphens
  if (foo.length > 0) {
    foo = foo.replace(/(\d{3})(\d*)/, '$1-$2');
  }
  $(this).val(foo);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type="text" class="phonenumber" maxlength="8"/>

答案 1 :(得分:0)

不使用g标志吗?这意味着“全局搜索匹配的模式”,但是您只希望它与第一个匹配,因此您不需要该标志。

答案 2 :(得分:0)

我不确定为什么需要正则表达式。只需使用旧的substring

我也将其更改为使用input事件,因为它在触发时(在value更新之后)更加一致

$('.phonenumber').on('input', function() {
  var foo = $(this).val().split("-").join(""); // remove hyphens
  if (foo.length === 7) {
    foo = `${foo.substring(0,3)}-${foo.substring(3)}`;
    // or if you're kickin it old skool:
    // foo = foo.substring(0,3) + "-" + foo.substring(3);
  }
  $(this).val(foo);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" class="phonenumber" maxlength="8"/>