Javascript 重新格式化用户输入的电话号码

Javascript 重新格式化用户输入的电话号码,javascript,regex,Javascript,Regex,我需要允许用户输入必须以国家代码开头的电话号码。 所以它只能是+41。。。或0041…(41只是一个未固定的示例)。 如果用户输入41555666则该数字无效。 现在,用户还可以输入+41/555-666,因为我不希望其他字符,我想删除它们,只得到+41555666,这是我用下面的代码所做的。 由于我想让事情变得更简单,我不想阻止和+并将其替换为00,因此如果用户输入+4188/555-666它的代码应该将其修改为00418855666,我认为这更容易。 但是我被卡住了,我不能用00替换+,所以

我需要允许用户输入必须以国家代码开头的电话号码。
所以它只能是+41。。。或0041…(41只是一个未固定的示例)。
如果用户输入41555666则该数字无效。
现在,用户还可以输入+41/555-666,因为我不希望其他字符,我想删除它们,只得到+41555666,这是我用下面的代码所做的。

由于我想让事情变得更简单,我不想阻止和+并将其替换为00,因此如果用户输入+4188/555-666它的代码应该将其修改为00418855666,我认为这更容易。

但是我被卡住了,我不能用00替换+,所以我需要一些帮助,因为这可能需要和
regex
,我不知道:(非常好)

<input type="text" id="txt" onblur="
var t = document.getElementById('txt').value; 
if(t.charAt(0) == '+'){t = t.replaceAt(0, '00');}
t = t.replace(/\D/g,'');document.getElementById('txt').value = t;"/>

我不熟悉您示例中的电话号码格式,但这应该是正确的

var phone = '+41/555-666';

var phone = phone.match(/\+?(\d{2})[^\d]?(\d{3})[^\d]?(\d{3})/);

//now you can format the phone number however you want!
var formatted = '00'+phone[1]+phone[2]+phone[3];

console.log(formatted);
这就是正则表达式作为变量传递时的样子——这很适合分解它并对其进行注释

var regex = new RegExp(
  '\\+?'+ //optional "+"
  '(\\d{2})'+ //capture 2 digits
  '[^\\d]?'+ //optional character that isn't a digit
  '(\\d{3})'+ //capture 3 digits
  '[^\\d]?'+ //optional character that isn't a digit
  '(\\d{3})' //capture 3 digits
);
更新:以下是处理上述场景和可选第二组数字的解决方案。 这是我在美国习惯的电话号码格式。我把它包括在内,以防有人看到这篇文章

//some samples
var phone = '100-555-1234';
//var phone = '1234567890';
//var phone = '556.555.1234';

var phone = phone.match(/(\d{3})[^\d]?(\d{3})[^\d]?(\d{4})/);

var formatted = '('+phone[1]+') '+phone[2]+'-'+phone[3];

console.log(formatted);
应该是

t=t.replace(/\+/,"00");

最好考虑任何可能被接受的用户输入。请参阅我的答案。抱歉,如果我输入“+41663431298”,它会给我“0041663431”-不是整数?@1110 hmm。您的数字格式对我来说很奇怪。我使用的是您给出的第一个示例
“+41/555-666”
。与
+4188/555-666一起使用什么是
88
?那也是可选的?我不知道这意味着什么,但逻辑很简单。我会再次更新我的答案。@1110好的,答案已更新。最好的办法是从这些示例中学习,并能够自己修改正则表达式。我对它们的评论应该会有所帮助。只要知道
/
开头和结尾处的end仅用于非注释版本,而在注释版本中,所有的
`都必须加倍。一行代码比较简单,因为它的
`,但是注释的一行代码很有用,因为它是分解的。只需检查每一行代码并尝试了解它的作用。此链接将帮助您开始。
t=t.replace(/\+/,"00");