5

我有文本字段让用户填写他的电话号码,但我需要强制该用户以某种格式填写,如下所示:(0599)-9-111222。

我的代码是:

function fomratPhone(phone){
     for(var i = 0; i < phone.length; i++){
         if (phone[0] == "(") continue;
         else return false; 

         if (phone[5] == ")") continue;
         else return false;   

         if (phone[6] == "-" || phone[8] == "-") continue;
         else return false; 
     }
     return true; 
}

但这段代码不起作用。

4

6 回答 6

6

另一种选择是jQuery inputmask 插件

<input type="text" name="phone" id="phone" />

<!-- include jQuery & inputmask plugin -->
<script type="text/javascript">
    $(function(){
        $("#phone").inputmask("mask", {"mask": "(9999)-9-999999"});
    });
</script>

这只是 NF 提供的另一种变体。我没有使用过提到的那个 NF,但是我用过这个没有问题。此外,因为它是一个 github 项目,如果您发现错误或进行更正,您可以分叉该项目并创建包含任何新添加的拉取请求。

于 2013-06-13T12:32:21.323 回答
2

你可以使用 这个 jQuery 屏蔽输入插件

于 2013-06-13T12:30:15.760 回答
0

假设输入的数字必须是每个提到的长度。否则只需剥离 {amount} 对

function fomratPhone(phone){
     return phone.length == 15 && /^\((\d){4}\)-[\d]-(\d){6}$/g.test(phone);
}
于 2013-06-13T12:29:49.640 回答
0

如果它对其他人很方便:这是一种在您键入时使其格式化的方法。它改编自这篇文章

function phone(n){
    var x = n.replace(/\D/g, '').match(/(\d{0,4})(\d{0,1})(\d{0,6})/);
    return (!x[2] ? x[1] : '(' + x[1] + ')' + x[2] + (x[3] ? '-' + x[3] : ''));
}

拨打电话('39020343993')会给你“(3902)0-343993”。拨打电话('3902034')会给你“(3902)0-34”。

于 2016-02-19T15:55:17.297 回答
0

您可以使用文本掩码库。他们在这里有一个很好的演示。

要将文本字段强制输入电话号码,您可以这样做(取自此处):

<script
  type="text/javascript"
  src="./node_modules/vanilla-text-mask/dist/vanillaTextMask.js"></script>
<script type="text/javascript">
  var phoneMask = ['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]

  // Assuming you have an input element in your HTML with the class .myInput
  var myInput = document.querySelector('.myInput')

  var maskedInputController = vanillaTextMask.maskInput({
    inputElement: myInput,
    mask: phoneMask
  })

  // Calling `vanillaTextMask.maskInput` adds event listeners to the input element. 
  // If you need to remove those event listeners, you can call
  maskedInputController.destroy()
</script>

他们还有 Angular、React 等的包装器。

于 2019-07-16T14:33:21.440 回答
-1

不知道为什么cfs删除他/她的答案,这很好。您可以简单地删除任何非数字字符,检查是否有 11 位数字,然后将数字重新格式化为您需要的格式,例如

var n = '1234 5 678901'
n = n.replace(/\D/g,'');

// do validation tests
if (n.length == 11) {

    // If passed tests, reformat as required
    console.log(n.replace(/(\d{4})(\d)(\d{6})/,'($1)-$2-$3')); // (1234)-5-678901
} 
于 2013-06-13T12:35:20.373 回答