我正在尝试在用户输入时格式化电话号码,我几乎已经得到了它,但我似乎就是不能把它带回家。
这就是我要找的:
+12345678900 --> +1 (234) 567 89-00
+1234567890 --> +1 (234) 567 89-0
+123456789 --> +1 (234) 567 89-
+12345 --> +1 (234) 5
+123 --> +1 (23
我的方法是:
'+12345678900'
.replace(
/^(\+\d{1})?(\d{1,3})?(\d{1,3})?(\d{1,2})?(\d{1,2})?$/,
"$1 ($2) $3 $4-$5"
); // +1 (234) 567 89-00 ✔️
它适用于一个完整的数字,但在其他情况下失败,这里是其中的一些:
+12345678 // expected '+1 (234) 567 8', received '+1 (234) 567 8-'
+1234567 // expected '+1 (234) 567', received '+1 (234) 567 -'
+123 // expected '+1 (23', received '+1 (23) -'
我错过了什么?
2条答案
按热度按时间dldeef671#
不要重复发明轮子。看看谷歌的LibPhonenumber,它有一个javascript实现,可以“按你输入”格式化。你可以试试demo here。
示例的输出:
这适用于所有(大多数?)国家,并确保您使用的格式是全球使用.如果我没有弄错,它是在Android手机中使用,最肯定的是在许多其他项目,我认为它可以被视为一个事实上的标准格式化数字.
ubby3x7f2#
你可以在replace方法中使用一个replacement函数。通过这个函数,你可以根据你所需要的条件来构建你的字符串:
题外话:我对你的要求有点困惑。我认为替代品更有意义: